CN111061737B - 一种分布式数据库快速扩容装置 - Google Patents
一种分布式数据库快速扩容装置 Download PDFInfo
- Publication number
- CN111061737B CN111061737B CN201911292782.XA CN201911292782A CN111061737B CN 111061737 B CN111061737 B CN 111061737B CN 201911292782 A CN201911292782 A CN 201911292782A CN 111061737 B CN111061737 B CN 111061737B
- Authority
- CN
- China
- Prior art keywords
- sub
- target
- total number
- ids
- distributed database
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/235—Update request formulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2358—Change logging, detection, and notification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种分布式数据库快速扩容装置,包括:计算单元,利用新增服务器个数、当前服务器个数、分布式数据库的组件信息和系统参数信息构建元数据表和扩容批次表;元数据表记录了分布式数据库的结构,扩容批次表记录了每次扩容前后分布式数据库的状态;扩容单元,用于冻结分布式数据库变更操作,获取新增服务器个数,利用计算单元更新元数据表和扩容批次表,并在更新过后解冻分布式数据库变更操作;sql定位和执行单元,用于保证分布式数据库的正常业务逻辑;该装置在分布式数据库扩容时不进行数据迁移,实现快速扩容,大幅减少分布式数据库扩容所需的时间,避免分布式数据库扩容操作对用户的影响。
Description
技术领域
本申请涉及分布式数据库技术领域,特别涉及分布式数据库的扩容领域。
背景技术
由于分布式数据库具有灵活的体系结构,且其可靠性高,可扩展性好,易于集成现有系统,因此正在被广泛使用。
现有分布式数据库扩容方法一般采用HASH取模方法,该方法可以在扩容后重新运行前,需要对分布式数据库中的数据进行迁移。当分布式数据库扩容前数据过多时,需要迁移的数量就会很多。例如在扩容前分布式数据库共有16台服务器,在扩容4台服务器后,需要将原有分布式数据库中每80条数据中的64条进行迁移。因此,整个数据迁移过程需要耗费大量时间,在迁移过程中也无法工作,影响用户的使用。
因此,如何解决当前分布式数据库扩容方法在扩容时需要耗费大量时间的问题,是本领域技术人员需要解决的技术问题。
发明内容
有鉴于此,本发明的目的在于提供一种分布式数据库快速扩容装置,解决了当前分布式数据库扩容方法在扩容时需要耗费大量时间的问题。
为解决上述技术问题,本发明提供了一种分布式数据库快速扩容装置,包括:
计算单元,用于利用新增服务器个数、当前服务器个数、分布式数据库的组件信息和系统参数信息构建元数据表或更新扩容批次表;其中,所述组件信息包括组件和组件id标识,所述组件包括桶、分表、分库、实例和服务器,所述组件id标识包括桶id、分表id、分库id、实例id和服务器id,所述系统参数信息包括每个服务器中实例的个数、每个实例中分库的个数、每个分库中分表的个数、每个分表中桶的个数和服务器总个数最大值;所述元数据表用于描述所述桶id、所述分表id、所述分库id、所述实例id和所述服务器id的对应关系;所述扩容批次表包括扩容批次id、服务器总个数、桶的总个数、最小实体id和最大实体id,用于描述所述扩容批次id、所述服务器总个数、所述桶的总个数、所述最小实体id和所述最大实体id的对应关系;
扩容单元,用于冻结分布式数据库变更操作,获取所述新增服务器个数,利用所述计算单元构建所述元数据表并更新所述扩容批次表,并在更新过后解冻所述分布式数据库变更操作;其中,所述元数据表与所述扩容批次表的新增扩容批次表记录相对应;
sql定位和执行单元,用于根据所述分布式数据库的sql中的实体id查询所述扩容批次表,确定目标扩容批次表记录和目标元数据表,根据目标扩容批次表记录中的所述桶的总个数,在所述目标元数据表中确定所述sql对应的目标服务器、目标实例、目标分库和目标分表,以便执行所述sql;其中,所述目标元数据表为与所述目标扩容批次表记录相对应的所述元数据表。
可选的,所述计算单元,用于执行以下步骤:
利用所述新增服务器个数和所述当前服务器个数相加得到所述服务器总个数;
计算所述桶的总个数,其中,所述桶的总个数=所述服务器总个数*所述每个服务器中实例的个数*所述每个实例中分库的个数*所述每个分库中分表的个数*所述每个分表中桶的个数;
将各个所述桶对应的所述桶id进行设置;其中,所述桶id为非负整数,所述桶id的取值范围从零到所述桶的总个数减一;
利用各个所述桶id与所述每个分表中桶的个数相除,得到各个所述桶id对应的所述分表id;
利用各个所述分表id与所述每个分库中分表的个数相除,得到各个所述分表id对应的所述分库id;
利用各个所述分库id与所述每个实例中分库的个数相除,得到各个所述分库id对应的所述临时实例id;
利用各个所述临时实例id除以所述服务器总个数后,再与所述服务器总个数最大值相乘,得到第一数值;
利用各个所述临时实例id对所述服务器总个数做取模运算,得到第二数值,将所述第一数值与所述第二数值相加,得到各个所述临时实例id对应的所述实例id;
利用所述临时实例id对所述服务器总个数最大值做取模运算,得到各个所述实例id对应的所述服务器id;
利用所述桶id、所述分表id、所述分库id、所述实例id和所述服务器id构建所述元数据表。
可选的,所述计算单元,用于执行以下步骤:
在所述扩容批次表的尾端增加一条所述新增扩容批次表记录,在所述新增扩容批次表记录的所述扩容批次id中填入目标扩容批次id;其中,所述目标扩容批次id为比所述扩容批次表倒数第二条扩容批次表记录的扩容批次id大一的非负整数;
获取所述分布式数据库中的最大实体id,利用所述最大实体id与目标间隔相加,得到第一实体id,并将所述第一实体id填入所述扩容批次表中所述倒数第二条扩容批次表记录的所述最大实体id中;其中,所述第一实体id为所述桶的总个数的倍数,所述目标间隔为最小为1的整数;
将所述服务器总个数填入所述新增扩容批次表记录的所述服务器总个数中;
将所述桶的总个数填入所述新增扩容批次表记录的所述桶的总个数中;
将所述第一实体id填入所述新增扩容批次表记录的所述最小实体id中,完成对所述扩容批次表的更新。
可选的,所述sql定位和执行单元,用于执行以下步骤:
获取sql,利用所述sql中的实体id查找所述扩容批次表,确定所述sql对应的所述目标扩容批次表记录和所述目标元数据表;其中,所述目标扩容批次表记录中的所述最小实体id小于所述sql中的所述实体id,所述最大实体id大于所述sql中的所述实体id;
将所述目标扩容批次表记录中的桶的总个数确定为目标桶的总个数,利用所述sql中的实体id对所述目标桶的总个数做取模运算,得到所述sql中的实体id对应的目标桶id,利用所述目标桶id查找所述目标元数据表,确定所述目标桶id对应的目标分表id、目标分库id、目标实例id和目标服务器id,并将所述sql发送给目标组件执行。
本发明提供的分布式数据库快速扩容装置,包括计算单元,用于利用新增服务器个数、当前服务器个数、分布式数据库的组件信息和系统参数信息构建元数据表或更新扩容批次表;其中,组件信息包括组件和组件id标识,组件包括桶、分表、分库、实例和服务器,组件id标识包括桶id、分表id、分库id、实例id和服务器id,系统参数信息包括每个服务器中实例的个数、每个实例中分库的个数、每个分库中分表的个数、每个分表中桶的个数和服务器总个数最大值;元数据表用于描述桶id、分表id、分库id、实例id和服务器id的对应关系;扩容批次表包括扩容批次id、服务器总个数、桶的总个数、最小实体id和最大实体id,用于描述扩容批次id、服务器总个数、桶的总个数、最小实体id和最大实体id的对应关系。扩容单元,用于冻结分布式数据库变更操作,获取新增服务器个数,利用计算单元构建元数据表并更新扩容批次表,并在更新过后解冻分布式数据库变更操作;其中,元数据表与扩容批次表的新增扩容批次表记录相对应。sql定位和执行单元,用于根据分布式数据库的sql中的实体id查询扩容批次表,确定目标扩容批次表记录和目标元数据表,根据目标扩容批次表记录中的桶的总个数,在目标元数据表中确定sql对应的目标服务器、目标实例、目标分库和目标分表,以便执行sql;其中,目标元数据表为与目标扩容批次表记录相对应的元数据表。
可见,该装置利用计算单元构建元数据表或更新扩容批次表,向扩容单元发送完成指令,元数据表记录了整个分布式数据库的结构,扩容批次表记录了每次扩容后分布式数据库的状态。扩容单元冻结分布式数据库变更操作后,利用计算单元构建元数据表并更新扩容批次表,并在更新后解冻分布式数据库变更操作,完成分布式数据库扩容。该装置对分布式数据库扩容时无需进行数据迁移,因此可以达到快速扩容的效果,大幅减少分布式数据库扩容所需的时间,同时可以避免分布式数据库扩容操作对用户的影响。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的一种分布式数据库快速扩容装置的结构示意图;
图2为本发明实施例提供的一种分布式数据库结构图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参考图1,图1为本发明实施例提供的一种分布式数据库快速扩容装置的结构示意图。该装置包括:
计算单元110,用于利用新增服务器个数、当前服务器个数、分布式数据库的组件信息和系统参数信息构建元数据表或更新扩容批次表;其中,组件信息包括组件和组件id标识,组件包括桶、分表、分库、实例和服务器,组件id标识包括桶id、分表id、分库id、实例id和服务器id,系统参数信息包括每个服务器中实例的个数、每个实例中分库的个数、每个分库中分表的个数、每个分表中桶的个数和服务器总个数最大值;元数据表用于描述桶id、分表id、分库id、实例id和服务器id的对应关系;扩容批次表包括扩容批次id、服务器总个数、桶的总个数、最小实体id和最大实体id,用于描述扩容批次id、服务器总个数、桶的总个数、最小实体id和最大实体id的对应关系。
扩容单元120,用于冻结分布式数据库变更操作,获取新增服务器个数,利用计算单元构建元数据表并更新扩容批次表,并在更新过后解冻分布式数据库变更操作;其中,元数据表与扩容批次表的新增扩容批次表记录相对应。
sql定位和执行单元130,用于根据分布式数据库的sql中的实体id查询扩容批次表,确定目标扩容批次表记录和目标元数据表,根据目标扩容批次表记录中的桶的总个数,在目标元数据表中确定sql对应的目标服务器、目标实例、目标分库和目标分表,以便执行sql;其中,目标元数据表为与目标扩容批次表记录相对应的元数据表。
整个分布式数据库由多个服务器组成,每个服务器中可以包含一个或多个数据库实例(也被称为实例),每个数据库实例中可以包含一个或多个分库,每个分库中可以包含一个或多个分表。每个分表中可以包含一个或多个桶,具体请参考图2,图2为本发明实施例提供的一种分布式数据库结构图。在本发明实施例中,为了更好的说明本发明提供的方法,整个分布式数据库包括服务器、实例、分库、分表和桶五个组件。当然,本方法也适用于其他结构的分布式数据库,如没有桶,只有服务器、实例、分库和分表四个组件的分布式数据库。
在本发明实施例中,当存在新增服务器且新增服务器上的实例已经安装,启动,初始化完成时,分布式数据库中获取到开始扩容指令后,利用扩容单元120冻结分布式数据库变更操作并获取新增服务器个数,计算单元110生成新的元数据表。具体的,计算单元利用新增服务器个数、当前服务器个数、分布式数据库的组件信息和系统参数信息构建元数据表的过程,包括:
利用新增服务器个数和当前服务器个数相加得到服务器总个数;
其中,服务器总个数可以用all_machine_num表示。
计算桶的总个数,其中,桶的总个数=服务器总个数*每个服务器中实例的个数*每个实例中分库的个数*每个分库中分表的个数*每个分表中桶的个数。
桶的总个数可以利用all_bucket_num表示,每个服务器中实例的个数可以用instance_num_per_machine表示,每个实例中分库的个数可以用partdb_num_per_instance表示,每个分库中分表的个数可以用parttable_num_per_partdb表示,每个分表中桶的个数可以用bucket_num_per_parttable表示。需要说明的是,本说明书中所有的除法均为向下取整除法,例如1/10=0,11/10=1等。
将各个桶对应的桶id进行设置;其中,桶id为非负整数,桶id的取值范围从零到桶的总个数减一;桶id可以用bucket_id表示。
利用各个桶id与每个分表中桶的个数相除,得到各个桶id对应的分表id。
分表id可以用parttable_id表示,则分表id可以用parttable_id=bucket_id/bucket_num_per_parttable计算得到。
利用各个分表id与每个分库中分表的个数相除,得到各个分表id对应的分库id。
分库id可以用partdb_id表示,则分库id可以用partdb_id=parttable_id/parttable_num_per_partdb计算得到。
利用各个分库id与每个实例中分库的个数相除,得到各个分库id对应的临时实例id。
临时实例id可以用tmp_instance_id表示,则临时实例id可以用tmp_instance_id=partdb_id/partdb_num_per_instance计算得到。
利用各个临时实例id除以服务器总个数后,再与服务器总个数最大值相乘,得到第一数值。
利用各个临时实例id对服务器总个数做取模运算,得到第二数值,将第一数值与第二数值相加,得到各个临时实例id对应的实例id。
实例id可以用instance_id表示,服务器总个数最大值可以用max_machine_num表示,则实例id可以用instance_id=(tmp_instance_id/all_machine_num)*max_machine_num+(tmp_instance_id%all_machine_num)计算得到。
利用临时实例id对服务器总个数最大值做取模运算,得到各个实例id对应的服务器id。
服务器id可以用machine_id表示,则服务器id可以用machine_id=tmp_instance_id%all_machine_num计算得到。需要说明的是,各个服务器均有对应的服务器id。
利用桶id、分表id、分库id、实例id和服务器id构建元数据表。
将各个对应的桶id、分表id、分库id、实例id和服务器id组成元数据表项,将所有元数据表项组合起来即可得到元数据表。
需要说明的是,在分布式数据库初始化时,同样利用计算单元构建元数据表,具体的构建过程与上述相同。
进一步,计算单元110在构建元数据表后,需要更新分布式数据库的扩容批次表,扩容批次表记录了每次扩容的信息,用于在执行sql时定位sql对应的目标组件。具体的,计算单元可以执行如下步骤以更新扩容批次表:
在扩容批次表的尾端增加一条新增扩容批次表记录,在新增扩容批次表记录的扩容批次id中填入目标扩容批次id;其中,目标扩容批次id为比扩容批次表倒数第二条扩容批次表记录的扩容批次id大一的非负整数。
获取分布式数据库中的最大实体id,利用最大实体id与目标间隔相加,得到第一实体id,并将第一实体id填入扩容批次表中倒数第二条扩容批次表记录的最大实体id中;其中,第一实体id为桶的总个数的倍数,目标间隔为最小为1的整数。
其中,实体id可以用entity_id表示,用于对存储的数据进行标识,实体id可以通过从sql中获取,或者可以利用id生成器生成。最大实体id为分布式数据库中所有数据对应的实体id的最大值。目标间隔用于生成第一实体id,其为最小为1的整数,具体大小根据实际情况而定,使得第一实体id为桶的总个数的倍数,因此目标间隔需大于等于1。
将服务器总个数填入新增扩容批次表记录的服务器总个数中。
将桶的总个数填入新增扩容批次表记录的桶的总个数中。
将第一实体id填入新增扩容批次表记录的最小实体id中,完成对扩容批次表的更新。
计算单元110完成对元数据表的构建和对扩容批次表的更新之后,扩容单元120可以解冻分布式数据库变更操作,即允许业务正常进行,以便重新获取sql并执行。
进一步,本发明提供的分布式数据库快速扩容装置还包括sql定位和执行单元130,用于根据分布式数据库的sql查询扩容批次表,确定目标扩容批次表记录和目标元数据表,根据目标扩容批次表记录和目标元数据表,确定sql对应的目标服务器、目标实例目标分库和目标分表,以便执行sql。
具体的,分布式数据库的sql由客户端发送至分布式数据库,利用sql中的实体id查找扩容批次表,确定sql对应的目标扩容批次表记录,并将该目标扩容批次表记录对应的元数据表确定为目标元数据表,即将名称与目标扩容批次表记录中的扩容批次id相对应的元数据表确定为目标元数据表。利用bucket_id=entity_id%all_bucket_num确定sql对应的目标桶id,其中entity_id为sql中的实体id,bucket_id为sql对应的目标桶id。在确定目标元数据表后,利用该目标桶id查找目标元数据表,即可确定目标桶id对应的目标分表id、目标分库id、目标实例id和目标服务器id,利用目标分表id、目标分库id、目标实例id和目标服务器id将sql通过目标服务器、目标实例、目标分库、目标分表的顺序发送给目标分表,并在目标分表中执行sql。
基于上述发明实施例,本发明实施例将说明一种实际情况下的具体实施过程。例如在扩容前分布式数据库包括4台服务器,扩容时新添加2台服务器,在本次扩容之前没有执行过分布式数据库扩容操作。每个分表中桶的个数bucket_num_per_parttable=4,每个分库中分表的个数parttable_num_per_partdb=1,每个实例中分库的个数partdb_num_per_instance=1,每个服务器中实例的个数instance_num_per_machine=2,服务器总个数最大值为256。扩容前分布式数据库桶的总个数为all_bucket_num=4*2*1*1*4=32,扩容前分布式数据库的对应关系,如表1所示。
在扩容时,构建新的元数据表。首先,计算桶的总个数,即all_bucket_num=(4+2)*2*1*1*4=48。将各个桶对应的桶id进行设置,桶id的取值范围从零到桶的总个数减一,因此桶id设置为0至47。利用各个桶id与每个分表中桶的个数相除,得到各个桶id对应的分表id。本发明实施例以桶id为20的桶举例说明对应关系的确定过程(即桶id为20的元数据表记录构建过程),其他桶的对应关系确定过程不再赘述。当桶id为20时,则对应的分表idparttable_id=bucket_id/bucket_num_per_parttable=20/4=5,对应的分库idpartdb_id=parttable_id/parttable_num_per_partdb=5/1=5,对应的临时实例idtmp_instance_id=partdb_id/partdb_num_per_instance=5/1=5,对应的第一数值=5/6*256=0*256=0,对应的第二数值=5%6=5,所以对应的实例id instance_id=0+5=5,对应的服务器id machine_id=5%256=5。利用各个元数据表记录即可构建得到元数据表,即将各个对应的桶id、分表id、分库id、实例id和服务器id组成元数据表记录,将所有元数据表记录组合起来即可得到新的元数据表。扩容后分布式数据库的元数据表如表2所示。
表1
bucket_id | parttable_id | partdb_id | tmp_instance_id | instance_id | machine_id |
0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 0 |
2 | 0 | 0 | 0 | 0 | 0 |
3 | 0 | 0 | 0 | 0 | 0 |
4 | 1 | 1 | 1 | 1 | 1 |
5 | 1 | 1 | 1 | 1 | 1 |
6 | 1 | 1 | 1 | 1 | 1 |
7 | 1 | 1 | 1 | 1 | 1 |
8 | 2 | 2 | 2 | 2 | 2 |
9 | 2 | 2 | 2 | 2 | 2 |
10 | 2 | 2 | 2 | 2 | 2 |
11 | 2 | 2 | 2 | 2 | 2 |
12 | 3 | 3 | 3 | 3 | 3 |
13 | 3 | 3 | 3 | 3 | 3 |
14 | 3 | 3 | 3 | 3 | 3 |
15 | 3 | 3 | 3 | 3 | 3 |
16 | 4 | 4 | 4 | 256 | 0 |
17 | 4 | 4 | 4 | 256 | 0 |
18 | 4 | 4 | 4 | 256 | 0 |
19 | 4 | 4 | 4 | 256 | 0 |
20 | 5 | 5 | 5 | 257 | 1 |
21 | 5 | 5 | 5 | 257 | 1 |
22 | 5 | 5 | 5 | 257 | 1 |
23 | 5 | 5 | 5 | 257 | 1 |
24 | 6 | 6 | 6 | 258 | 2 |
25 | 6 | 6 | 6 | 258 | 2 |
26 | 6 | 6 | 6 | 258 | 2 |
27 | 6 | 6 | 6 | 258 | 2 |
28 | 7 | 7 | 7 | 259 | 3 |
29 | 7 | 7 | 7 | 259 | 3 |
30 | 7 | 7 | 7 | 259 | 3 |
31 | 7 | 7 | 7 | 259 | 3 |
表2
由于在本次扩容之前分布式数据库没有进行过扩容操作,因此扩容批次表中仅有分布式数据库初始化时构建的扩容批次为0的批次表记录,更新前的扩容批次表如表3:
表3
扩容批次id | 服务器总个数 | 最小实体id | 最大实体id | 桶的总个数 |
0 | 4 | 0G | 32 |
在扩容过程中,还需要对扩容批次表进行更新。具体的,在扩容批次表的尾端增加一条新增扩容批次表记录,在新增扩容批次表记录的扩容批次id中填入目标扩容批次id;其中,目标扩容批次id为比扩容批次表倒数第二条扩容批次表记录的扩容批次id大一的非负整数。
获取分布式数据库中的最大实体id,利用最大实体id与目标间隔相加,得到第一实体id,并将第一实体id填入扩容批次表中倒数第二条扩容批次表记录的最大实体id中;其中,第一实体id为桶的总个数的倍数,目标间隔为最小为1的整数。例如当最大实体id为1G-100时,为了使第一实体id为桶的总个数的倍数,可以将目标间隔选择为100,即第一实体id为1G。
将服务器总个数填入新增扩容批次表记录的服务器总个数中,将桶的总个数填入新增扩容批次表记录的桶的总个数中,将第一实体id填入新增扩容批次表记录的最小实体id中,完成对扩容批次表的更新,完成更新后的扩容批次表为表4:
表4
扩容批次id | 服务器总个数 | 最小实体id | 最大实体id | 桶的总个数 |
0 | 4 | 0G | 1G | 32 |
1 | 6 | 1G | 48 |
在完成对元数据表的构建和扩容批次表的更新过后,利用扩容单元120解冻分布式数据库变更操作。
需要说明的是,每次新建的元数据表都需要保存起来,以便sql定位和执行模块130在进行日常的分布式数据库操作过程中使用。具体的,各个元数据表与扩容批次表的新增扩容批次表记录相对应,例如,元数据表可以按照扩容批次表记录中的扩容批次id命名。参照表1、表2和表4,原有的元数据表,即上述的表1,在生成时将其命名为metatable_0;在生成扩容批次id为1的扩容批次表记录的扩容操作中,同时会生成新的元数据表,即上述的表2,因此在生成表2时将表2命名为metatable_1,以此区分不同扩容批次对应的元数据表。在sql定位时,确定目标扩容批次表记录后,即可确定目标扩容批次表记录中的扩容批次id,利用扩容批次id确定目标元数据表,然后利用目标桶id在目标元数据表中确定对应的目标分表、目标分库、目标实例和目标服务器。
在正常的分布式数据库操作中,需要对sql定位和执行,具体的,分布式数据库中存在用户表tab_user_info,其形式如表5所示:
表5
字段 | 字段描述 |
u_id | 用户id,int类型 |
u_name | 用户姓名,varchar类型 |
u_reg_dt | 用户注册时间,timestamp类型 |
u_addr | 用户地址,varchar类型 |
u_age | 用户年龄,int类型 |
其中,用户id即为实体id。利用sql定位和执行单元获取sql,当获取的sql为select*from tab_user_info t where u_id=1000时,确定实体id为1000,查找扩容批次表,由于1000大于0且小于1G,因此对应的目标扩容批次表记录为扩容批次id为0的扩容批次表记录,该扩容批次表记录对应的元数据表为名称为metatable_0的元数据表,即上述的表1。目标扩容批次表对应的桶的总个数,即目标桶的总个数为32,则目标桶id为1000%32=8,利用目标桶id查找目标元数据表(即表1),可以确定对应的目标分表id为2,目标分库id为2,目标实例id为2,目标服务器id为2,将sql发送给目标分表,由目标组件执行该sql,即先利用目标服务器id将sql发送给目标服务器,利用目标实例id将sql发送给目标实例,利用目标分库id将sql发送给目标分库,利用目标分表id将sql发送给目标分表,由目标分表执行该sql。
应用本发明实施例提供的分布式数据库快速扩容装置,利用计算单元构建元数据表或更新扩容批次表,向扩容单元发送完成指令,元数据表记录了整个分布式数据库的结构,扩容批次表记录了每次扩容后分布式数据库的状态。扩容单元冻结分布式数据库变更操作后,利用计算单元构建元数据表并更新扩容批次表,并在更新后解冻分布式数据库变更操作,完成分布式数据库扩容。该装置对分布式数据库扩容时无需进行数据迁移,因此可以达到快速扩容的效果,大幅减少分布式数据库扩容所需的时间,同时可以避免分布式数据库扩容操作对用户的影响。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应该认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系属于仅仅用来将一个实体或者操作与另一个实体或者操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其他任何变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
以上对本发明所提供的一种分布式数据库快速扩容装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (4)
1.一种分布式数据库快速扩容装置,其特征在于,包括:
计算单元,用于利用新增服务器个数、当前服务器个数、分布式数据库的组件信息和系统参数信息构建元数据表或更新扩容批次表;其中,所述组件信息包括组件和组件id标识,所述组件包括桶、分表、分库、实例和服务器,所述组件id标识包括桶id、分表id、分库id、实例id和服务器id,所述系统参数信息包括每个服务器中实例的个数、每个实例中分库的个数、每个分库中分表的个数、每个分表中桶的个数和服务器总个数最大值;所述元数据表用于描述所述桶id、所述分表id、所述分库id、所述实例id和所述服务器id的对应关系;所述扩容批次表包括扩容批次id、服务器总个数、桶的总个数、最小实体id和最大实体id,用于描述所述扩容批次id、所述服务器总个数、所述桶的总个数、所述最小实体id和所述最大实体id的对应关系;
扩容单元,用于冻结分布式数据库变更操作,获取所述新增服务器个数,利用所述计算单元构建所述元数据表并更新所述扩容批次表,并在更新过后解冻所述分布式数据库变更操作;其中,所述元数据表与所述扩容批次表的新增扩容批次表记录相对应;
sql定位和执行单元,用于根据所述分布式数据库的sql中的实体id查询所述扩容批次表,确定目标扩容批次表记录和目标元数据表,根据目标扩容批次表记录中的所述桶的总个数,在所述目标元数据表中确定所述sql对应的目标服务器、目标实例、目标分库和目标分表,以便执行所述sql;其中,所述目标元数据表为与所述目标扩容批次表记录相对应的所述元数据表。
2.根据权利要求1所述的分布式数据库快速扩容装置,其特征在于,所述计算单元,用于执行以下步骤:
利用所述新增服务器个数和所述当前服务器个数相加得到所述服务器总个数;
计算所述桶的总个数,其中,所述桶的总个数=所述服务器总个数*所述每个服务器中实例的个数*所述每个实例中分库的个数*所述每个分库中分表的个数*所述每个分表中桶的个数;
将各个所述桶对应的所述桶id进行设置;其中,所述桶id为非负整数,所述桶id的取值范围从零到所述桶的总个数减一;
利用各个所述桶id与所述每个分表中桶的个数相除,得到各个所述桶id对应的所述分表id;
利用各个所述分表id与所述每个分库中分表的个数相除,得到各个所述分表id对应的所述分库id;
利用各个所述分库id与所述每个实例中分库的个数相除,得到各个所述分库id对应的临时实例id;
利用各个所述临时实例id除以所述服务器总个数后,再与所述服务器总个数最大值相乘,得到第一数值;
利用各个所述临时实例id对所述服务器总个数做取模运算,得到第二数值,将所述第一数值与所述第二数值相加,得到各个所述临时实例id对应的所述实例id;
利用所述临时实例id对所述服务器总个数最大值做取模运算,得到各个所述实例id对应的所述服务器id;
利用所述桶id、所述分表id、所述分库id、所述实例id和所述服务器id构建所述元数据表。
3.根据权利要求1所述的分布式数据库快速扩容装置,其特征在于,所述计算单元,用于执行以下步骤:
在所述扩容批次表的尾端增加一条所述新增扩容批次表记录,在所述新增扩容批次表记录的所述扩容批次id中填入目标扩容批次id;其中,所述目标扩容批次id为比所述扩容批次表倒数第二条扩容批次表记录的扩容批次id大一的非负整数;
获取所述分布式数据库中的最大实体id,利用所述最大实体id与目标间隔相加,得到第一实体id,并将所述第一实体id填入所述扩容批次表中所述倒数第二条扩容批次表记录的所述最大实体id中;其中,所述第一实体id为所述桶的总个数的倍数,所述目标间隔为最小为1的整数;
将所述服务器总个数填入所述新增扩容批次表记录的所述服务器总个数中;
将所述桶的总个数填入所述新增扩容批次表记录的所述桶的总个数中;
将所述第一实体id填入所述新增扩容批次表记录的所述最小实体id中,完成对所述扩容批次表的更新。
4.根据权利要求1所述的分布式数据库快速扩容装置,其特征在于,所述sql定位和执行单元,用于执行以下步骤:
获取sql,利用所述sql中的实体id查找所述扩容批次表,确定所述sql对应的所述目标扩容批次表记录和所述目标元数据表;其中,所述目标扩容批次表记录中的所述最小实体id小于所述sql中的所述实体id,所述最大实体id大于所述sql中的所述实体id;
将所述目标扩容批次表记录中的桶的总个数确定为目标桶的总个数,利用所述sql中的实体id对所述目标桶的总个数做取模运算,得到所述sql中的实体id对应的目标桶id,利用所述目标桶id查找所述目标元数据表,确定所述目标桶id对应的目标分表id、目标分库id、目标实例id和目标服务器id,并将所述sql发送给目标组件执行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911292782.XA CN111061737B (zh) | 2019-12-12 | 2019-12-12 | 一种分布式数据库快速扩容装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911292782.XA CN111061737B (zh) | 2019-12-12 | 2019-12-12 | 一种分布式数据库快速扩容装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111061737A CN111061737A (zh) | 2020-04-24 |
CN111061737B true CN111061737B (zh) | 2023-05-09 |
Family
ID=70300733
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911292782.XA Active CN111061737B (zh) | 2019-12-12 | 2019-12-12 | 一种分布式数据库快速扩容装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111061737B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114840497B (zh) * | 2022-05-31 | 2024-01-12 | 苏州浪潮智能科技有限公司 | 一种数据库的行迁移预处理方法、系统、装置及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102930062A (zh) * | 2012-11-30 | 2013-02-13 | 南京富士通南大软件技术有限公司 | 一种数据库快速水平扩展的方法 |
CN103944964A (zh) * | 2014-03-27 | 2014-07-23 | 上海云数信息科技有限公司 | 一种分布式系统及根据该系统进行逐步扩容的方法 |
CN104572809A (zh) * | 2014-11-17 | 2015-04-29 | 杭州斯凯网络科技有限公司 | 一种分布式关系数据库自由扩展方法 |
WO2016168530A1 (en) * | 2015-04-16 | 2016-10-20 | Nuodb, Inc. | Backup and restore in a distributed database utilizing consistent database snapshots |
CN108399258A (zh) * | 2018-03-09 | 2018-08-14 | 深圳市富途网络科技有限公司 | 一种数据库的分库分表扩容方法 |
CN110502582A (zh) * | 2019-08-27 | 2019-11-26 | 江苏华库数据技术有限公司 | 一种分布式数据库的在线扩容方法 |
-
2019
- 2019-12-12 CN CN201911292782.XA patent/CN111061737B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102930062A (zh) * | 2012-11-30 | 2013-02-13 | 南京富士通南大软件技术有限公司 | 一种数据库快速水平扩展的方法 |
CN103944964A (zh) * | 2014-03-27 | 2014-07-23 | 上海云数信息科技有限公司 | 一种分布式系统及根据该系统进行逐步扩容的方法 |
CN104572809A (zh) * | 2014-11-17 | 2015-04-29 | 杭州斯凯网络科技有限公司 | 一种分布式关系数据库自由扩展方法 |
WO2016168530A1 (en) * | 2015-04-16 | 2016-10-20 | Nuodb, Inc. | Backup and restore in a distributed database utilizing consistent database snapshots |
CN108399258A (zh) * | 2018-03-09 | 2018-08-14 | 深圳市富途网络科技有限公司 | 一种数据库的分库分表扩容方法 |
CN110502582A (zh) * | 2019-08-27 | 2019-11-26 | 江苏华库数据技术有限公司 | 一种分布式数据库的在线扩容方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111061737A (zh) | 2020-04-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101876983B (zh) | 数据库分区方法与系统 | |
US8285677B2 (en) | Method and apparatus for propagating tables while preserving cyclic foreign key relationships | |
US10803079B2 (en) | Timing-based system-period temporal table in a database system | |
CN109918229B (zh) | 非日志模式的数据库集群副本构建方法及装置 | |
CN105517644A (zh) | 一种数据分区方法和设备 | |
US9281992B2 (en) | Method and system for identifying storage device | |
CN111061737B (zh) | 一种分布式数据库快速扩容装置 | |
CN112632065A (zh) | 一种数据存储方法、装置、存储介质及服务器 | |
CN114840487A (zh) | 分布式文件系统的元数据管理方法和装置 | |
CN110716924B (zh) | 删除过期数据的方法和装置 | |
CN111522811A (zh) | 数据库的处理方法及装置、存储介质、终端 | |
CN112579591B (zh) | 数据校验方法、装置、电子设备及计算机可读存储介质 | |
CN111046246B (zh) | 标签更新方法及装置、分布式存储系统 | |
CN107015883B (zh) | 一种动态数据备份方法及装置 | |
CN106920057A (zh) | 物料管理方法及系统 | |
CN116737067A (zh) | 一种图数据的存储加载结构和方法 | |
CN111666302A (zh) | 用户排名的查询方法、装置、设备及存储介质 | |
CN115129738A (zh) | 一种数据跨库写入方法、装置和设备 | |
CN114691307A (zh) | 事务处理方法及计算机系统 | |
US20200379967A1 (en) | Data management apparatus, method and non-transitory tangible machine-readable medium thereof | |
CN102004761A (zh) | 数据存储方法和系统 | |
CN115481187B (zh) | 一种数据读写方法、装置及存储介质 | |
CN117762949B (zh) | 数据抽取方法、装置、电子设备及存储介质 | |
CN117389761A (zh) | kafka扩缩容的处理方法、装置、设备及存储介质 | |
CN115269738A (zh) | 一种动态分库的实现方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |