CN110825794B - 分区合并方法和数据库服务器 - Google Patents
分区合并方法和数据库服务器 Download PDFInfo
- Publication number
- CN110825794B CN110825794B CN201811147298.3A CN201811147298A CN110825794B CN 110825794 B CN110825794 B CN 110825794B CN 201811147298 A CN201811147298 A CN 201811147298A CN 110825794 B CN110825794 B CN 110825794B
- Authority
- CN
- China
- Prior art keywords
- data storage
- storage unit
- unit information
- partition
- layer
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/278—Data partitioning, e.g. horizontal or vertical partitioning
-
- 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/2358—Change logging, detection, and notification
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种分区合并的方法和数据库服务器,该方法包括:第一数据库服务器根据第一分区的当前文件的标识获取第一分区的元数据,根据该第二分区的当前文件的标识获取该第二分区的元数据,根据该第一分区的元数据和该第二分区的元数据生成该第三分区的元数据。上述技术方案可以减少数据读写量,提高分区合并的速度。
Description
本申请要求于2018年8月14日提交中国专利局、申请号为201810919475.9、申请名称为“基于日志结构的合并树的分布式数据库系统分区处理方法”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本申请涉及信息技术领域,更具体地,涉及分区合并方法和数据库服务器。
背景技术
在键值数据库(key-value database,KVDB)这一类分布式数据库系统中,为了适应数据条目数量的不断增长的需求,通常采用分区(partition)管理数据表的数据条目。每个分区由某1个数据库服务器来提供服务,如存储管理。分区与数据库服务器间的归属关系由分布式数据库系统的管理服务器动态指定。
分布式数据库系统要求能够按照集群规模、负载、或其他策略动态进行负载均衡。因此,在一些情况下,需要将两个相邻的分区合并为一个新的分区。
目前相邻分区的合并方案需要将其中一个分区内的数据条目遍历读出,然后写入另一个分区中。一个分区中保存的数据条目的量通常很大。因此,分区合并过程中的大量数据条目读写会使得开销大增。
发明内容
本申请提供一种分区合并方法和数据库服务器,可以减少数据的读写量。
第一方面,本申请实施例提供一种分布式数据库系统中分区合并方法,该分布式数据库系统包括第一数据库服务器、第二数据库服务器和管理服务器,该第一数据库服务器运行第一分区,该第二数据库服务器运行第二分区;该方法包括:该第一数据库服务器接收管理服务器发送的合并指令,该合并指令用于实现将该第一分区和该第二分区合并为第三分区,其中该第一分区和该第二分区为相邻分区;该合并指令包含该第一分区的当前文件的标识和该第二分区的当前文件的标识;该第一分区的当前文件中记录有存储该第一分区的元数据的文件的文件标识;该第二分区的当前文件中记录有存储该第二分区的元数据的文件的文件标识;该第一数据库服务器根据该第一分区的当前文件的标识获取该第一分区的元数据;该第一数据库服务器根据该第二分区的当前文件的标识获取该第二分区的元数据;该第一数据库服务器合并该第一分区的元数据和该第二分区的元数据生成该第三分区的元数据。上述技术方案可以直接根据第一分区的元数据和第二分区的元数据将第一分区和第二分区合并为第三分区,无需将第一分区和第二分区内的数据遍历读出到合并后的分区,这样可以减少数据读写量,提高分区合并的速度。另外,两个分区合并过程中,这两个分区的业务写入操作会被暂时冻结直到分区合并完成,本申请实施例也减少了分区的业务写入操作冻结时间。可选的,第一数据库服务器的负载轻于第二数据库服务器的负载。本申请实施例中,通过合并第一分区的元数据和第二分区的元数据生成第三分区的元数据这种方式实现将第一分区和第二分区合并为第三分区,即访问第三分区的元数据即可访问第一分区的数据条目和第二分区的数据条目。也就是说通过合并第一分区的元数据和第二分区的元数据生成第三分区的元数据,第三分区的元数据对应第一分区的数据条目和第二分区的数据条目,第一分区的数据条目和第二分区的数据条目作为第三分区的数据条目。
结合第一方面,在第一方面的一种可能的实现方式中,该第一分区的元数据包括该第一分区的二级列簇的数据存放单元信息,该第二分区的元数据包括该第二分区的二级列簇的数据存放单元信息,该第一数据库服务器合并该第一分区的元数据和该第二分区的元数据生成该第三分区的元数据,具体包括:该第一数据库服务器合并该第一分区的二级列簇的数据存放单元信息和该第二分区的二级列簇的数据存放单元信息生成目标二级列簇的数据存放单元信息;根据该目标二级列簇的数据存放单元信息确定该第三分区的二级列簇的数据存放单元信息。上述技术方案中,在对第一分区和第二分区进行合并时,可以只对第一分区的二级列簇的数据存放单元信息和第二分区的二级列簇的数据存放单元信息进行合并,而无需复制(也称为读写)相应的数据存放单元中存储的数据条目,这样可以减少数据的读写量,从而减少因对分区被冻结的时间,提高分区合并效率,减少业务写入拥塞。可选的,分布式数据库系统是以采用日志结构的合并树(long structured merge-tree,LSM-tree)算法的数据库系统,数据存放单元信息是排序字符串表(Sorted StringTable,SSTable)信息,数据存放单元是SSTable,存储第一分区的元数据的文件和存储第二分区的元数据的文件均是清单文件(manifest file)。
结合第一方面,在第一方面的一种可能的实现方式中,该第一数据库服务器为该第三分区创建当前文件,该第三分区的当前文件中记录有存储该第三分区的元数据的文件的文件标识。
结合第一方面,在第一方面的一种可能的实现方式中,该第一分区的二级列簇的数据存放单元信息包括P1层数据存放单元信息,其中P1为大于或等于2的正整数;该第二分区的二级列簇的数据存放单元信息包括P2层数据存放单元信息,其中P2为大于或等于2的正整数;该目标二级列簇的数据存放单元信息包括Q层数据存放单元信息,该Q层数据存放单元信息包括该第一分区的二级列簇的数据存放单元信息和该第二分区的二级列簇的数据存放单元信息,其中,该Q层数据存放单元信息的一层数据存放单元信息包括该第一分区的二级列簇的数据存放单元信息包括的P1层数据存放单元信息中的一层数据存放单元信息和该第二分区的二级列簇的数据存放单元信息包括的P2层数据存放单元信息中的一层数据存放单元信息,该Q层数据存放单元信息的Q-1层数据存放单元信息中的一层数据存放单元信息包括该第一分区的二级列簇的数据存放单元信息包括的P1层数据存放单元信息中的一层数据存放单元信息或者该第二分区的二级列簇的数据存放单元信息包括的P2层数据存放单元信息中的一层数据存放单元信息,其中Q等于P1+P2-1。
结合第一方面,在第一方面的一种可能的实现方式中,该Q层数据存放单元信息中的第0层数据存放单元信息包括该第一分区的二级列簇的数据存放单元信息的第0层数据存放单元信息和该第二分区的二级列簇的数据存放单元信息的第0层数据存放单元信息,该Q层数据存放单元信息中的第2×q-1层数据存放单元信息包括该第一分区的二级列簇的数据存放单元信息包括的P1层数据存放单元信息中P层数据存放单元信息的第q层数据存放单元信息,该Q层数据单元存放信息中的第2×q层数据存放单元信息包括该第二分区的二级列簇的数据存放单元信息包括的P2层数据存放单元信息中P层数据存放单元信息的第q层数据存放单元信息,q=1,……,P-1,其中P的取值为P1与P2中的最小值减1。
结合第一方面,在第一方面的一种可能的实现方式中,该Q层数据存放单元信息中的第0层数据存放单元信息包括该第一分区的二级列簇的数据存放单元信息的第0层数据存放单元信息和该第二分区的二级列簇的数据存放单元信息的第0层数据存放单元信息,该Q层数据存放单元信息中的第1层数据存放单元信息至第P-1层数据存放单元信息分别为该第一分区的二级列簇的数据存放单元信息包括的P1层数据存放单元信息中P层数据存放单元信息的中的第1层数据存放单元信息至第P-1层数据存放单元信息;该Q层数据存放单元信息中的第P层数据存放单元信息至第Q-1层数据存放单元信息分别为该第二分区的二级列簇的数据存放单元信息包括的P2层数据存放单元信息中P层数据存放单元信息的中的第1层数据存放单元信息至第P-1层数据存放单元信息,其中P的取值为P1与P2中的最小值减1。
结合第一方面,在第一方面的一种可能的实现方式中,该方法还包括:该数据库服务器根据该目标二级列簇的数据存放单元信息,确定该第三分区的二级列簇的数据存放单元信息,其中该第三分区的二级列簇的数据存放单元信息包括P层数据存放单元信息,其中该第三分区的二级列簇的数据存放单元信息的P层数据单元存放信息中第1层数据存放单元信息是该Q层数据存放单元信息的第0层数据存放单元信息对应的数据存放单元进行归并重排后的得到的数据存放单元的数据存放单元信息,该第三分区的二级列簇的数据存放单元信息的P层数据单元存放信息中的第2层至第P-1层数据存放单元信息中的每层数据存放单元信息是该Q层数据存放单元信息的第1层数据存放单元信息至第Q-1层数据存放单元信息中的至少两层数据存放单元信息对应的数据存放单元进行归并重排后的得到的数据存放单元的数据存放单元信息。上述技术方案中,在对第一分区和第二分区进行合并过程中,只需对进行归并重排的数据存放单元进行读写,数据的读写量小,从而减少因对分区被冻结的时间,提高分区合并效率,减少业务拥塞。进一步,上述技术方案可以压缩第三分区中的数据存放单元信息层数,便于以后对第三分区中的数据的查找等操作。
结合第一方面,在第一方面的一种可能的实现方式中,该二级列簇的数据存放单元信息中的每个数据存放单元信息中的条目键值的前缀是非分区键值。
结合第一方面,在第一方面的一种可能的实现方式中,该第一分区的元数据包括该第一分区的二级列簇的数据存放单元信息,该第二分区的元数据包括该第二分区的二级列簇的数据存放单元信息,该第一数据库服务器合并该第一分区的元数据和该第二分区的元数据生成该第三分区的元数据,具体包括:该第一数据库服务器合并该第一分区的二级列簇的数据存放单元信息和该第二分区的二级列簇的数据存放单元信息生成该第三分区的二级列簇的数据存放单元信息。进一步的,该第三分区的二级列簇的数据存储单元信息的生成方式可以参考前面第一方面的各种实现方式中的目标二级列簇的数据存储单元信息的生成方式。
结合第一方面,在第一方面的一种可能的实现方式中,该第一分区的元数据还包括该第一分区的预写日志信息集合,该第二分区的元数据还包括该第二分区的预写日志信息集合,该方法还包括:该数据库服务器合并该第一分区的预写日志信息集合和该第二分区的预写日志信息集合生成该第三分区的预写日志信息集合,其中,该第三分区的预写日志信息集合包括该第一分区的预写日志信息集合中的预写日志信息以及该第二分区的预写日志信息集合中的预写日志信息,其中N为大于或等于2的正整数,N1和N2为大于或等于1的正整数且N1与N2的和为N。上述技术方案中,在对第一分区和第二分区进行合并时,可以只对第一分区的预写日志信息集合和第二分区的预写日志信息集合进行合并,而无需复制相应的预写日志信息,这样可以减少数据的读写量,从而减少因对分区被冻结的时间,提高分区合并效率,减少业务拥塞。
结合第一方面,在第一方面的一种可能的实现方式中,该第一分区的元数据还包括该第一分区的主列簇的数据存放单元信息,该第二分区的元数据还包括该第二分区的主列簇的数据存放单元信息,该方法还包括:该数据库服务器合并该第一分区的主列簇的数据存放单元信息和该第二分区的主列簇的数据存放单元信息生成该第三分区的主列簇的数据存放单元信息。上述技术方案中,在对第一分区和第二分区进行合并时,可以只对第一分区的主列簇的数据存放单元信息和第二分区的主列簇的数据存放单元信息进行合并,而无需复制相应的数据存放单元中的数据条目,这样可以减少数据的读写量,从而减少因对分区被冻结的时间,提高分区合并效率,减少业务拥塞。
结合第一方面,在第一方面的一种可能的实现方式中,该第一分区的主列簇的数据存放单元信息包括K1层数据存放单元信息,其中K1为大于或等于1的正整数,该第二分区的主列簇的数据存放单元信息包括K2层数据存放单元信息,其中K2为大于或等于1的正整数;该第三分区的主列簇的数据存放单元信息包括K层数据存放单元信息,其中该第三分区的主列簇的数据存放单元信息包括的K层数据存放单元信息中的第k层数据存放单元信息包括该K1层数据存放单元信息的K层数据存放单元信息中的第k层数据存放单元信息和该K2层数据存放单元信息的K层数据存放单元信息中的第k层数据存放单元信息,其中K为K1与K2的最小值,其中该K1层数据存放单元信息的第k层数据存放单元信息中的任一个数据存放单元信息的条目键值和该K2层数据存放单元信息的第k层数据存放单元信息中的任一个数据存放单元信息的条目键值不重叠。
结合第一方面,在第一方面的一种可能的实现方式中,该主列簇的数据存放单元信息中的每个数据存放单元信息中的条目键值的前缀是分区键值。
第二方面,提供了一种数据库服务器,该数据库服务器包括用于执行第一方面或第一方面的任一种可能的实现方式的单元。
第三方面,提供了一种数据库服务器,该数据库服务器包括处理器和通信接口。处理器结合通信接口实现第一方面或第一方面的任一种可能的实现方式。
第四方面,本申请实施例提供一种计算机存储介质,数据库服务器运行计算机指令该实现存第一方面或第一方面的任一种可能的实现方式。
第五方面,本申请提供了一种包含指令的计算机程序产品,当该计算机程序产品中的计算机指令在数据库服务器上运行时,使得数据库服务器执行上述第一方面或第一方面的任一种可能的实现方式。
第六方面,本申请提供了一种分布式数据库系统中分区合并方法,该分布式数据库系统包括第一数据库服务器、第二数据库服务器和管理服务器,该第一数据库服务器运行第一分区,该第二数据库服务器运行第二分区;该方法包括:该管理服务器创建第三分区,确定将该第一分区和该第二分区合并为该第三分区;该管理服务器向该第一数据库服务器发送合并指令,该合并指令用于实现将该第一分区和该第二分区合并为第三分区,其中该第一分区和该第二分区为相邻分区;该合并指令包含该第一分区的当前文件的标识和该第二分区的当前文件的标识;该第一分区的当前文件中记录有存储该第一分区的元数据的文件的文件标识;该第二分区的当前文件中记录有存储该第二分区的元数据的文件的文件标识。
结合第六方面,在第六方面的一种可能的实现方式中,该管理服务器接收第一数据库发送的响应消息,该响应消息包含第三分区的当前文件标识。
结合第六方面,在第六方面的一种可能的实现方式中,该管理服务器建立该第三分区与该第一数据库服务器的映射关系。该管理服务器在创建第三分区后,更新分区路由表,分区路由表包含第三分区与该第一数据库服务器的映射关系,具体实现可以是第三分区的标识与数据库服务器的地址的映射关系。
结合第六方面,在第六方面的一种可能的实现方式中,该管理服务器根据该第一数据库服务器和该第二数据库服务器的负载,确定该第一数据库服务器将该第一分区和该第二分区合并为该第三分区;其中,该第一数据库服务器的负载轻于该第二数据库服务器的负载。
第七方面,提供了一种管理服务器,该管理服务器包括用于执行第六方面或第六方面的任一种可能的实现方式的单元。
第八方面,提供了一种管理服务器,该管理服务器包括处理器和通信接口。处理器结合通信接口实现第六方面或第六方面的任一种可能的实现方式。
第九方面,本申请实施例提供一种计算机存储介质,管理服务器运行计算机指令该实现存第六方面或第六方面的任一种可能的实现方式。
第十方面,本申请提供了一种包含指令的计算机程序产品,当该计算机程序产品中的计算机指令在管理服务器上运行时,使得管理服务器实现上述第六方面或第六方面的任一种可能的实现方式。
第十一方面,本申请提供了一种分布式数据库系统,其中,该分布式数据库系统包括第一数据库服务器、第二数据库服务器和管理服务器;该第一数据库服务器用于实现第一方面或第一方面的任一种可能的实现方式,该管理服务器用于实现上述第六方面或第六方面的任一种可能的实现方式。
第十二方面,本申请实施例提供一种分布式数据库系统中分区合并方法,该分布式数据库系统包括第一数据库服务器、第二数据库服务器和管理服务器,该第一数据库服务器运行第一分区,该第二数据库服务器运行第二分区;该方法包括:该第一数据库服务器接收管理服务器发送的合并指令,该合并指令用于实现将该第一分区和该第二分区合并为第三分区,其中该第一分区和该第二分区为相邻分区;该第一数据库服务器根据该第一分区获取该第一分区的元数据和该第二分区的元数据,合并该第一分区的元数据和该第二分区的元数据生成该第三分区的元数据。
结合第十二方面,在第十二方面的一种可能的实现方式中,该合并指令包含该第一分区的当前文件的标识和该第二分区的当前文件的标识;该第一分区的当前文件中记录有存储该第一分区的元数据的文件的文件标识;该第二分区的当前文件中记录有存储该第二分区的元数据的文件的文件标识;该第一数据库服务器获取该第一分区的元数据和该第二分区的元数据,具体包括:根据该第一分区的当前文件的标识获取该第一分区的元数据,根据该第二分区的当前文件的标识获取该第二分区的元数据。
在第十二方面的其他可能实现方式,可以参考第一方面的任一种可能的实现方式。
附图说明
图1是一个分区示意图。
图2是KVDB的架构示意图。
图3是根据本申请实施例提供的处理分区的方法的示意性流程图。
图4是层合并过程的示意图。
图5是根据本申请实施例提供的数据库服务器的结构框图。
图6是根据本发明实施例提供的数据库服务器的结构框图。
图7是根据本申请实施例提供的管理服务器的结构框图。
图8是根据本发明实施例提供的管理服务器的结构框图。
具体实施方式
下面将结合附图,对本申请中的技术方案进行描述。
本申请中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B的情况,其中A,B可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下中的至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a、b、c、a-b、a-c、b-c、或a-b-c,其中a、b、c可以是单个,也可以是多个。另外,在本申请的实施例中,“第一”、“第二”等字样并不对数量和执行次序进行限定。
需要说明的是,本申请中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其他实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
为了便于本领域技术人员更好地理解本申请实施例,首先对本申请实施例分布式数据库系统涉及的一些基本概念进行介绍。
KVDB是使用键值存储的数据库。数据库中的数据是按照键值的形式进行组织、索引和存储的。常用的KVDB包括:RockesDB,LevelDB等。
分区键值:分区技术中,通常固定使用数据表中数据条目的某个列域的值、或者某几个列域值的顺序组合值来决定分区,该值称为分区键值(partition key)。每个数据条目根据其分区键值可以唯一确定本数据条目所在的分区。
下面结合表1对分区键值进行更具体地描述。
表1
bn | on | ver | crt | dlc |
A | d | 1 | 1501232852986 | 20 |
A | d | 2 | 1501232852986 | 20 |
B | x | 1 | 1506710238983 | 20 |
表1示出了三个数据条目的五个列域{bn,on,ver,crt,dlc}。例如,第一个数据条目的五个列域的值分别为{A,d,1,1501232852986,20}。分区键值可以是上述五个列域中的一个列域的值,也可以是几个列域的值的顺序组合值。例如,假设分区键值是列域{bn,on}的组合值。可以看出,上述三个数据条目中,第一个数据条目和第二个数据条目的列域{bn,on}均为{A,d}。换句话说,第一个数据条目和第二个数据条目的分区键值均为{A,d}。上述三个数据条目中的第三个数据条目的列域{bn,on}为{B,x}。换句话说,第三个数据条目的分区键值为{B,x}。
为了便于描述,表1中以字母表示列域On的值。在实际应用中,列域On的值可以是具体的数值,例如0109,0208等。
本申请实施例中分区中的数据条目是按照分区键值的自然序排列的。依然假设分区键值是列域{bn,on}的组合值。图1是一个分区键值为{bn,on}的多个分区的示意图。如图1所示的五个分区边界上的点的归属可以采用左开右闭或者右开左闭的原则划分。若采用左开右闭原则,则分区键值为bn=A,on=w的数据条目为分区1中的数据条目。若采用右开左闭原则,则分区键值为bn=A,on=w的数据条目为分区2中的数据条目。结合图1的分区示意以及表1所示的三个数据条目的分区键值可以看出,第一个数据条目和第二个数据条目是分区1中的数据条目,第三个数据条目是分区2中的数据条目。为了保证分区中的数据条目按照分区键值的自然序排列,可以采用范围分区(range partition)方式对数据表进行拆分。其他数据表拆分方式也可能使得分区中的数据条目是按照分区键值的自然序排列。因此,本申请实施例对数据表的拆分方式并不进行限定,只要数据表的拆分方式能够使得数据表拆分后,分区中的数据条目是按照分区键值的自然序排列即可。从图1所示的分区可以,分区1和分区2中的分区键值按照自然序排列并且连续,称为相邻的分区。本申请实施例中,KVDB将数据表中的数据条目以分区为粒度由不同的数据库服务器管理,即数据库服务器提供分区的数据条目的访问,也称为数据库服务器为分区提供服务或数据库服务器运行分区。
分区路由表:分区路由表可以包括以下信息:分区标识和归属的数据库服务器的地址,还可以包括分区根索引文件标识、分区的左边界、分区的右边界和分区状态等。数据库服务器的地址可以是互联网协议(Internet Protocol,IP)地址,也可以是数据库服务器的标识等,本发明实施例对此不作限定,分区路由表也称为分区视图。图1是一个分区示意图。例如,表2是一个根据图1所示的多个分区的分区路由表。分区根索引文件标识标识每个分区的清单文件的文件名,分区状态表示该分区当前的状态,例如正常服务状态、分裂状态、合并状态、隔离状态等。如表2所示的Normal表示分区当前的状态为正常服务状态。
表2
$Min表示无穷小,$Max表示无穷大。以数据条目的分区键值为输入,查询分区路由表,就可以得到该数据条目所属的分区,以及归属的数据库服务器等信息。以表1中的第三个数据条目为例,该数据条目的分区键值为{B,x}。根据如表2所示的分区路由表,可以确定该数据条目所属的分区为分区2,归属的数据库服务器地址为8.11.234.2:27021。
本申请实施例中所称的分区合并都是针对相邻分区的合并,例如分区1和分区2合并,分区3和分区4合并,分区4和分区5合并。
主索引条目包括分区键值。除分区键值外,主索引条目还可以包括数据条目的其他多个列域的值。分区键值以及其他多个列域中的一个或多个列域的值可以构成主索引条目。还以表1为例,主索引条目可以包括如表1所示的五个列域{bn,on,ver,crt,dlc},其中主索引条目键值对应列域{bn,on,ver}。{bn,on}可以称为主索引条目的前缀。可以看出,{bn,on}是分区键值。因此,该主索引条目是以分区键值为前缀的主索引条目。条目键值是对一个数据条目的唯一索引,可以包括该数据条目的多个列域。
二级索引条目也可以称为辅助索引条目。在分布式数据库系统中,为了满足复杂查询场景,可以为每个数据条目创建一个或多个二级索引条目。二级索引条目由二级索引列域与主索引条目键值对应的列域组成。二级索引条目的格式可以为二级索引列域+主索引条目键值对应的列域,或称为二级索引列域和主索引条目键值对应的列域。在此情况下,该二级索引条目是以非分区键值为前缀的二级索引条目。二级索引条目的格式还可以是主索引条目键值对应的列域+二级索引列域。在此情况下,该二级索引条目是以分区键值为前缀的二级索引条目。在每个数据条目包括多个二级索引条目的情况下,该多个二级索引条目中不同的二级索引条目中所包括的二级索引列域不相同。例如,假设每个数据条目包括两个二级索引条目,其中一个二级索引列域可以为dlc,另一个二级索引列域可以为crt。
每个分区下可以包括一个主索引条目集合或者一个或多个二级索引条目集合。主索引条目集合由该分区下的所有主索引条目组成。主索引条目集合中的主索引条目按照主索引条目键值排序。
二级索引条目集合中的二级索引条目按照二级索引条目键值排序。若每个分区下包括多个二级索引条目集合,则每个二级索引条目集合由具有相同二级索引条目列域的二级索引条目组成。假设每个数据条目包括两个二级索引条目,其中一个二级索引列域可以为dlc,另一个二级索引列域可以为crt。该分区下可以包括两个二级索引条目集合,其中一个二级索引条目集合包括该分区下二级索引列域为crt的全部二级索引条目键值,另一个二级索引条目集合包括分区下二级索引列域为dlc的全部二级索引条目键值。
具有相同特征的多个列域可以成为一个列簇(column family)。如上所述,主索引条目集合中所包括的主索引条目具有相同的多个列域。因此,一个主索引条目集合可以称为一个列簇,该列簇可以称为主索引列簇。类似的,一个二级索引条目集合包括的二级索引条目也具有相同的多个列域。因此一个二级索引条目也可以作为一个列簇,该列簇可以称为二级索引列簇。
本申请的一些实施例是以采用日志结构的合并树(long structured merge-tree,LSM-tree)算法的KVDB为例进行描述的。因此,以下对LSM-tree进行简单介绍。
预写日志(write-ahead logging,WAL)文件:当在KVDB中插入一条数据条目时,该数据条目会先写入WAL文件中,写入成功之后插入到内存表(memory table,MemTable)。
MemTable:MemTable对应WAL文件,是WAL文件内容在内存中的有序组织结构。MemTable提供了键值数据(数据条目)的写入、删除以及读取的操作结构。MemTable内部将数据条目按条目键值有序存储。
不可变MemTable:当MemTable占用的内存空间到达一个上限值之后,需要将内存中的按条目键值有序存储的数据条目转储到排序字符串表(Sorted String Table,SSTable),同时对应的WAL文件不再写入新的数据条目。此时,MemTable会被冻结成不可变MemTable(Immutable MemTable),并同时生成一个新的MemTable。新到来的数据条目被记入新的WAL文件和新生成的MemTable中。不可变MemTable中的数据条目是不可更改的。换句话说,不可变MemTable中的数据条目只能读取不能写入或删除。
SSTable是KVDB数据存放的单元。每个SSTable中的条目键值是有序的。每个不可变MemTable进行合并处理后,会得到一个SSTable。对不可变MemTable进行合并得到SSTable的过程可以成为次级合并(minor compaction)。
KVDB对SSTable文件的存储划分为不同层(level),level 0至level n,其中n为大于或等于1的正整数。level 0中会包括多个SSTable文件,在该多个SSTable中,一个SStable是对一个不可变MemTable进行次级合并后得到的。换句话说,对多个不可变MemTable进行次级合并分别得到对应的SSTable。该多个SSTable中的不同SSTable之间的条目键值会有重合。在满足一定条件后,level 0中的SSTable与Level 1中的SSTable进行合并,合并后得到的SSTable就是level 1中存储的SSTable。
level 1至level n中每层level维护指定的SSTable个数,每层level内的所有SSTable之间的条目键值不重叠。当一层level中的SSTable满足一定条件时,该level中的SSTable可以被选出与下一层level(即level的值加1对应的Level层,例如,level 1的下一level是level 2,level 2的下一level是level 3,以此类推)中的SSTable合并。在合并之后,该选出的SSTable被删除。两个level之间的SSTable的合并处理可以称为主合并(majorcompaction)。
清单文件(manifest file):清单文件用于记录WAL文件信息以及SSTable信息。更具体地,清单文件中所记录的WAL文件信息包括WAL文件的标识以及该WAL文件的时间序列号。清单文件中记录的SSTable信息包括SSTable所属的列簇、该SSTtable所属的level,该SSTable的标识、该SSTable的时间序列号、该SSTable的大小、该SSTable的最小条目键值以及该SSTable的最大条目键值中的一种或几种。
下面将结合图2对KVDB进行介绍。
如图2所示的KVDB 200包括:管理服务器210,数据库服务器221、数据库服务器222和数据库服务器223。如图2所示的KVDB 200还可以包括存储服务器231、存储服务器232和存储服务器233。
数据库服务器221、数据库服务器222和数据库服务器223可以合称为分布式数据库服务集群。存储服务器231、存储服务器232和存储服务器233可以为KVDB提供分布式共享存储池。具体实现中,也可以由集中式的存储为KVDB提供存储资源,例如由存储阵列为KVDB提供存储资源。
管理服务器210负责指定分区与数据库服务器之间的归属关系。分区路由表也由管理服务器210负责维护。
上述将MemTable冻结为不可变MemTable、次级合并以及主合并的操作都可以由数据库服务器执行。
在分布式数据库系统中,一个数据库服务器负责一个分区的数据条目的存储管理,因此,以存储服务器为例,数据库服务器生成的相应分区的WAL文件,SSTable以及清单文件可以持久化在存储服务器中,该数据库服务器可以访问存储服务器中存储的该相应分区的WAL文件,SSTable以及清单文件。MemTable,不可变MemTable都保存在数据库服务器的内存中。
图3是根据本申请实施例提供的处理分区的方法的示意性流程图。图3所示的方法可以应用于基于日志结构的合并树的KVDB。其中,分区1由数据库服务器1提供服务,分区2由数据库服务器2提供服务。
301,管理服务器根据均衡策略对相邻的第一分区和第二分区合并,在分区路由表中标记分区1和分区2为合并状态,并持久化。
均衡策略可以为分区数据条目数量、访问热度等,或者运行该分区的数据库服务器的负载等。
302,管理服务器通知数据库服务器1的第一分区准备合并。
303,管理服务器通知数据库服务器2的第二分区准备合并。
304,数据库服务器2停止合并任务并将第二分区置为只读,将写请求挂起,向该管理服务器发送成功响应。
具体地,若该数据库服务器2有尚未开始的合并任务,则该数据库服务器2停止进行合并任务。若该数据库服务器2正在进行合并任务,则该数据库服务器2在完成正在进行的合并任务后,停止进行合并任务。换句话说,数据库服务器2在收到管理服务器1发送的准备合并的通知后,不再对第二分区保存的内容进行更改。
305,数据库服务器1停止合并任务并将第一分区置为只读,将写请求挂起,向该管理服务器发送成功响应。
步骤305与步骤304类似,在此就不必赘述。
306,管理服务器在分布式数据库系统中创建第三分区,在分区路由表中将第三分区标记为初始状态。
管理服务器在分布式数据库系统中创建第三分区,具体实现可以为生成第三分区的标识,将第三分区的标识添加至分区路由表。示例性的,本申请实施例中具体实现过程中,管理服务器可以基于数据库服务器1和数据库服务器2的负载确定由负载较轻的数据库服务器1运行第三分区,例如数据库服务器1的负载较小,则在数据库服务器1上运行第三分区,由数据库服务器1为第三分区提供服务。可以理解的是,可选的,管理服务器也可以指示其他数据库服务器(例如数据库服务器2或者数据库服务器3等)将该第一分区与该第二分区合并为该第三分区,即在其他数据库服务器上运行第三分区。本申请实施例中具体实现过程中,另一种实现方式,在数据库服务器1和数据库服务器2随机选择一个数据库服务器运行第三分区,或者通过特定算法在数据库服务器1和数据库服务器2中选择一个数据库服务器运行第三分区,例如可以基于Hash或数据库服务器所管理的分区标识(如分区编号)对总的分区数量取模决定一个数据库服务器运行第三分区。具体的,管理服务器根据上述实现方式确定运行第三分区的数据库服务器。
307,管理服务器向数据库服务器1发送合并指令,该合并指令用于实现将第一分区与第二分区合并为第三分区。
本申请实施例中,通过合并第一分区的元数据和第二分区的元数据生成第三分区的元数据这种方式实现将第一分区和第二分区合并为第三分区,即访问第三分区的元数据即可访问第一分区的数据条目和第二分区的数据条目。具体的,一种实现,该合并指令中包含该第一分区的当前(current)文件的标识和该第二分区的当前文件的标识。该第一分区的当前文件中记录有存储该第一分区的元数据的文件的文件标识。该第二分区的当前文件中记录有存储该第二分区的元数据的文件的文件标识。以采用LSM-tree算法的KVDB为例,LSM-tree算法的KVDB中的清单文件用于存储分区的元数据,因此当前文件中记录有存储分区的元数据的文件的文件标识可以是LSM-tree算法的KVDB中的清单文件的标识。
308,数据库服务器1创建对应于第三分区的数据库。
数据库服务器1创建对应于第三分区的数据库,一种实现方式为启动新的数据库进程或数据库实例,另一种实现方式可以为使用当前运行的数据库进程或数据库实例作为第三分区的数据库。
309,数据库服务器1获取第一分区的元数据和第二分区的元数据。
具体实现,数据库服务器1读取第一分区的当前文件,得到第一分区的元数据;读取第二分区的当前文件,得到第二分区的元数据;将该第一分区的元数据与该第二分区的元数据载入到数据库服务器1的内存。
另外一种实现,数据库服务器1从管理服务器获取运行第二分区的数据库服务器2的地址,数据库服务器1从数据库服务器2获取第二分区的元数据,或者从从数据库服务器2获取第二分区的元数据的信息,数据库服务器1根据第二分区的元数据的信息获取第二分区的元数据。第二分区的元数据的信息可以是存储第二分区的元数据的文件的文件标识。
310,数据库服务器1合并第一分区的元数据与第二分区的元数据,生成第三分区的元数据。
具体地,数据库服务器1生成第三分区的元数据。进一步的,数据库服务器1为第三分区创建当前文件,该第三分区的当前文件中记录有存储该第三分区的元数据的文件的文件标识。
该第一分区的元数据包括第一分区的二级列簇的数据存放单元信息。该第二分区的元数据包括第二分区的二级列簇的数据存放单元信息。以采用LSM-tree算法的KVDB为例,数据存放单元信息是SSTable信息,数据存放单元是SSTable。
在第一分区与第二分区中,以分区键值为前缀的索引(包括主索引和二级索引)条目与以非分区键值为前缀的二级索引条目分别使用不同的列簇组织存储。主列簇的数据存放单元信息是指以分区键值为前缀的索引(包括主索引和二级索引)条目组织存储的相关信息。二级列簇的数据存放单元信息是指以非分区键值为前缀的二级索引条目组织存储的相关信息。
数据库服务器1可以合并该第一分区的二级列簇的数据存放单元信息与该第二分区的二级列簇的数据存放单元信息生成目标二级列簇的数据存放单元信息。可选的,在一些实施例中,该目标二级列簇的数据存放单元信息可以作为该第三分区的二级列簇的数据存放单元信息。可选的,在另一些实施例中,数据服务器1可以根据该目标列簇的数据存放单元信息确定该第三分区的二级列簇的数据存放单元信息。
该第一分区的二级列簇的数据存放单元信息包括P1层的数据存放单元信息,其中P1为大于或等于2的正整数;该第二分区的二级列簇的数据存放单元信息包括P2层的数据存放单元信息,其中P2为大于或等于2的正整数;该目标二级列簇的数据存放单元信息包括Q层的数据存放单元信息,该Q层的数据存放单元信息包括该第一分区的二级列簇的数据存放单元信息和该第二分区的二级列簇的数据存放单元信息,其中,该Q层的数据存放单元信息的一层数据存放单元信息包括该P1层的数据存放单元信息中的一层数据存放单元信息和该P2层的数据存放单元信息中的一层数据存放单元信息,该Q层的数据存放单元信息的Q-1层的数据存放单元信息中的一层数据存放单元信息包括该P1层数据存放单元信息中的一层数据存放单元信息或者该P2层数据存放单元信息中的一层数据存放单元信息,其中Q等于P1+P2-1。
可选的,在一些实施例中,该Q层数据存放单元信息中的第0层数据存放单元信息包括该第一分区的二级列簇的数据存放单元信息的第0层数据存放单元信息和该第二分区的二级列簇的数据存放单元信息的第0层数据存放单元信息,该Q层数据存放单元信息中的第2×q-1层数据存放单元信息包括该P1层数据存放单元信息中P层数据存放单元信息的第q层数据存放单元信息,该Q层数据单元存放信息中的第2×q层数据存放单元信息包括该P2层数据存放单元信息中P层数据存放单元信息的第q层数据存放单元信息,q=1,……,P-1,其中P的取值为P1与P2中的最小值减1。
可选的,在一些实施例中,该P1层数据存放单元信息中P层数据存放单元信息可以是该P1层数据存放单元信息中的第0层至第P-1层数据存放单元信息。类似的,该P2层数据存放单元信息中P层数据存放单元信息可以是该P2层数据存放单元信息中的第1层至第P层数据存放单元信息。
可选的,在一些实施例中,该P1层数据存放单元信息中P层数据存放单元信息可以是该P1层数据存放单元信息中的倒数第1层至倒数第P层数据存放单元信息。类似的,该P2层数据存放单元信息中P层数据存放单元信息可以是该P2层数据存放单元信息中的倒数第1层至倒数第P层数据存放单元信息。
可选的,在一些实施例中,该P1层数据存放单元信息中P层数据存放单元信息可以是该P1层数据存放单元信息中的中间P层数据存放单元信息。例如,该P1层数据存放单元信息中P层数据存放单元信息该P1层数据存放单元信息的第2层至第P+1层数据存放单元信息。类似的,该P2层数据存放单元信息中P层数据存放单元信息可以是该P2层数据存放单元信息中的中间P层数据存放单元信息。例如,该P2层数据存放单元信息中P层数据存放单元信息该P2层数据存放单元信息的第2层至第P+1层数据存放单元信息。
以采用LSM-tree算法的KVDB为例,如前所述,数据存放单元信息是SSTable信息,数据存放单元是SSTable。第一分区的清单文件中包括二级列簇的P1层SSTable信息,该P1层SSTable信息的索引条目是以非分区键值为前缀的二级索引条目。第二分区的清单文件中包括二级列簇的P2层SSTable信息,该P2层SSTable信息的索引条目是以非分区键值为前缀的二级索引条目。目标清单文件中包括二级列簇的Q层SSTable信息,该Q层SSTable信息的索引条目是以非分区键值为前缀的二级索引条目。可选的,在一些实施例中,该目标清单文件可以是该第三分区的清单文件。可选的,在另一些实施例中,该目标清单文件可以用于确定该第三分区的清单文件。
假设P1与P2取值均为2。在此情况下Q=2+2-1=3。在此情况下,该第一分区的清单文件中包括二级列簇的2层SSTable信息,分别为第0层SSTable信息至第1层SStable信息。该第二分区的清单文件中包括二级列簇的2层SSTable信息,分别为第0层SSTable信息至第1层SStable信息。该目标清单文件中包括二级列簇的3层SSTable信息,分别为第0层SSTable信息至第2层SStable信息。
该目标清单文件中的第0层SSTable信息包括该第一分区的清单文件中的第0层SSTable信息和该第二分区的清单文件中的第0层SSTable信息。
该目标清单文件中的第1层SSTable信息包括该第一分区的清单文件中的第1层SSTable信息。
该目标清单文件中的第2层SSTable信息包括该第二分区的清单文件中的第1层SSTable信息。
下面结合表3、表4和表5对二级列簇的数据存放单元信息的合并进行描述。
表3
表3示出了第一分区的二级列簇的数据存放单元信息包括的两层数据存放单元信息,该两层数据存放单元信息中的每层数据存放单元信息包括2个数据存放单元信息。表3是以采用LSM-tree算法的KVDB为例得到的表。因此,相应的该数据存放单元信息也可以称为SSTable信息。
表4
表4示出了第二分区的二级列簇的数据存放单元信息包括的两层数据存放单元信息,该两层数据存放单元信息中的每层数据存放单元信息包括2个数据存放单元信息。表4是以采用LSM-tree算法的KVDB为例得到的表。因此,相应的该数据存放单元信息也可以称为SSTable信息。
表5
表5示出了目标二级列簇的数据存放单元信息包括的三层数据存放单元信息,该三层数据存放单元信息中的第0层数据存放单元信息包括4个数据存放单元信息,第1层和第二层数据存放单元信息分别包括2个数据存放单元信息。表5是以采用LSM-tree算法的KVDB为例得到的表。因此,相应的该数据存放单元信息也可以称为SSTable信息。可以看出,表5所示的level 0的SSTable信息包括表3和表4所示的level 0的SSTable信息,表5所示的level 1的SSTable信息包括表3所示的level 1的SSTable信息。表5所示的level2的SSTable信息包括表4所示的level 2的SSTable信息。换句话说,合并后得到的目标清单文件的level 0的SSTable信息包括第一分区的清单文件中的level 0的SSTable信息与第二分区的清单文件中的level 0的SSTable信息;合并后得到的目标清单文件的level 1的SSTable信息包括第一分区的清单文件中的level 1的SSTable信息;合并后得到的目标清单文件的level 2的SSTable信息包括第二分区的清单文件中的level 1的SSTable信息。
可选的,在另一些实施例中,该Q层数据存放单元信息中的第2×q-1层数据存放单元信息包括该第二分区的二级列簇的P层数据存放单元信息的第q层数据存放单元信息,该2×P层数据单元存放信息中的第2×q层数据存放单元信息包括该第一分区的二级列簇的P层数据存放单元信息的第q层数据存放单元信息。
假设P1与P2取值均为2。在此情况下Q=2+2-1=3。在此情况下,该第一分区的清单文件中包括第0层SSTable信息和第1层SStable信息。该第二分区的清单文件中包括第0层SSTable信息和第1层SStable信息。该目标清单文件中包括二级列簇的3层SSTable信息,分别为第0层SSTable信息至第2层SStable信息。
该目标清单文件中的第0层SSTable信息包括该第一分区的清单文件中的第0层SSTable信息和该第二分区的清单文件中的第0层SSTable信息。
该目标清单文件中的第1层SSTable信息包括该第二分区的清单文件中的第1层SSTable信息。
该目标清单文件中的第2层SSTable文件信息包括该第一分区的清单文件中的第1层SSTable信息。
上述实施例中,来自于第一分区的SSTable信息与来自于第二分区的SSTable信息叠加的方式是互相穿插。在另一些实施例中,来自于第一分区的SSTable信息与来自于第二分区的SStable信息也可以是堆叠的。
可选的,在一些实施例中,该Q层数据存放单元信息中的第0层数据存放单元信息包括该第一分区的的第0层数据存放单元信息和该第二分区的第0层数据存放单元信息,该Q层数据存放单元信息中的第1层数据存放单元信息至第P-1层数据存放单元信息分别为该第一分区的P层数据存放单元信息中的第1层数据存放单元信息至第P-1层数据存放单元信息;该Q层数据存放单元信息中的第P层数据存放单元信息至第Q-1层数据存放单元信息分别为该第二分区的P层数据存放单元信息的中的第1层数据存放单元信息至第P-1层数据存放单元信息。
假设P1与P2取值均为4。在此情况下Q=4+4-1=7。在此情况下,该第一分区的清单文件中包括二级列簇的4层SSTable信息,分别为第0层SSTable信息至第3层SStable信息。该第二分区的清单文件中包括二级列簇的4层SSTable信息,分别为第0层SSTable信息至第3层SStable信息。该目标清单文件中包括二级列簇的7层SSTable信息,分别为第0层SSTable信息至第6层SStable信息。
该目标清单文件中的第0层SSTable信息包括该第一分区的清单文件中的第0层SSTable信息和该第二分区的清单文件中的第0层SSTable信息。
该目标清单文件中的第1层SSTable信息包括该第一分区的清单文件中的第1层SSTable信息。
该目标清单文件中的第2层SSTable信息包括该第一分区的清单文件中的第2层SSTable信息。
该目标清单文件中的第3层SSTable信息包括该第一分区的清单文件中的第3层SSTable信息。
该目标清单文件中的第4层SSTable信息包括该第二分区的清单文件中的第1层SSTable信息。
该目标清单文件中的第5层SSTable信息包括该第二分区的清单文件中的第2层SSTable信息。
该目标清单文件中的第6层SSTable信息包括该第二分区的清单文件中的第3层SSTable信息。
可选的,在另一些实施例中,该Q层数据存放单元信息中的第0层数据存放单元信息包括该第一分区的第0层数据存放单元信息和该第二分区的第0层数据存放单元信息,该Q层数据存放单元信息中的第1层数据存放单元信息至第P-1层数据存放单元信息分别为该第二分区的P层数据存放单元信息的中的第1层数据存放单元信息至第P-1层数据存放单元信息;该Q层数据存放单元信息中的第P层数据存放单元信息至第Q-1层数据存放单元信息分别为该第一分区的P层数据存放单元信息的中的第1层数据存放单元信息至第P-1层数据存放单元信息。
假设P1与P2取值均为4。在此情况下Q=4+4-1=7。在此情况下,该第一分区的清单文件中包括第0层SSTable信息至第3层SStable信息。该第二分区的清单文件中包括第0层SSTable信息至第3层SStable信息。该目标清单文件中包括二级列簇的7层SSTable信息,分别为第0层SSTable信息至第6层SStable信息。
该目标清单文件中的第0层SSTable信息包括该第一分区的清单文件中的第0层SSTable信息和该第二分区的清单文件中的第0层SSTable信息。
该目标清单文件中的第1层SSTable信息包括该第二分区的清单文件中的第1层SSTable信息。
该目标清单文件中的第2层SSTable信息包括该第二分区的清单文件中的第2层SSTable信息。
该目标清单文件中的第3层SSTable信息包括该第二分区的清单文件中的第3层SSTable信息。
该目标清单文件中的第4层SSTable信息包括该第一分区的清单文件中的第1层SSTable信息。
该目标清单文件中的第5层SSTable信息包括该第一分区的清单文件中的第2层SSTable信息。
该目标清单文件中的第6层SSTable信息包括该第一分区的清单文件中的第3层SSTable信息。
可以看出,相邻分区的二级列簇的数据存放单元信息合并过程中第0层数据存放单元信息的合并方式是直接将两个分区的二级列簇的数据存放单元信息中第0层数据存放单元信息合并为同一层二级列簇的数据存放单元信息。换句话说,合并方式是直接将第二分区中的第0层数据存放单元信息直接追加到第一分区中第0层的数据存放单元信息。这种合并方式可以称为追加合并。而相邻分区的二级列簇的数据存放单元信息合并过程中除第0层数据存放单元信息以外的数据存放单元信息的合并方式是以叠加的方式合并的,以下可以将这种合并方式成为叠加合并。
上述例子中,P1与P2取值相同。在一些情况下,P1与P2取值可以是不同的。在此情况下,该Q层数据存放单元中的2×P层数据存放单元信息可以包括该P1层数据存放单元信息中的P层数据存放单元信息以及该P2层数据存放单元信息中的P层数据存放单元信息。该Q层数据存放单元信息的Q-2×P层数据存放单元信息可以包括P’层数据存放单元信息,其中P’的取值为max(P1,P2)-min(P1,P2),其中max(P1,P2)表示P1与P2中的最大值,min(P1,P2)表示P1与P2中的最小值。换句话说,P’等于P1与P2中的最大值减去P1与P2中的最小值。或者P’的取值为|P1-P2|,即P’的取值为P1与P2之差的绝对值。
例如,假设P1=5,P2=3,在此情况下Q=5+3-1=7。在此情况下,该第一分区的清单文件中包括二级列簇的5层SSTable信息,分别为第0层SSTable信息至第4层SStable信息。该第二分区的清单文件中包括二级列簇的3层SSTable信息,分别为第0层SSTable信息至第2层SStable信息。该目标清单文件中包括二级列簇的7层SSTable信息,分别为第0层SSTable信息至第6层SStable信息。
该目标清单文件中的第0层SSTable文件信息包括该第一分区的清单文件中的第0层SSTable信息和该第二分区的清单文件中的第0层SSTable信息。
该目标清单文件中的第1层SSTable信息包括该第一分区的清单文件中的第1层SSTable信息。
该目标清单文件中的第2层SSTable信息包括该第二分区的清单文件中的第1层SSTable信息。
该目标清单文件中的第3层SSTable信息包括该第一分区的清单文件中的第2层SSTable信息。
该目标清单文件中的第4层SSTable信息包括该第二分区的清单文件中的第2层SSTable信息。
该目标清单文件中的第5层SSTable信息包括该第一分区的清单文件中的第3层SSTable信息。
该目标清单文件中的第6层SSTable信息包括该第一分区的清单文件中的第4层SSTable信息。
换句话说,该P’层数据存放单元信息可以是该Q层数据存放单元信息中的最后P’层数据存放单元信息。
可选的,在另一些实施例中,该P’层数据存放单元信息也可以是该Q层数据存放单元信息中的前P’层数据存放单元信息。
例如,假设P1=5,P2=3,在此情况下Q=5+3-1=7。在此情况下,该第一分区的清单文件中包括二级列簇的5层SSTable信息,分别为第0层SSTable信息至第4层SStable信息。该第二分区的清单文件中包括二级列簇的3层SSTable信息,分别为第0层SSTable信息至第2层SStable信息。该目标清单文件中包括二级列簇的7层SSTable信息,分别为第0层SSTable信息至第6层SStable信息。
该目标清单文件中的第0层SSTable信息包括该第一分区的清单文件中的第0层SSTable信息和该第二分区的清单文件中的第0层SSTable信息。
该目标清单文件中的第1层SSTable信息包括该第一分区的清单文件中的第1层SSTable信息。
该目标清单文件中的第2层SSTable信息包括该第一分区的清单文件中的第2层SSTable信息。
该目标清单文件中的第3层SSTable信息包括该第一分区的清单文件中的第3层SSTable信息。
该目标清单文件中的第4层SSTable信息包括该第二分区的清单文件中的第1层SSTable信息。
该目标清单文件中的第5层SSTable信息包括该第一分区的清单文件中的第4层SSTable信息。
该目标清单文件中的第6层SSTable信息包括该第二分区的清单文件中的第2层SSTable信息。
该第一分区的元数据还包括第一分区的主列簇的数据存放单元信息。该第二分区的元数据包括第二分区的主列簇的数据存放单元信息。
数据库服务器1可以合并该第一分区的主列簇的数据存放单元信息与该第二分区的主列簇的数据存放单元信息生成第三分区的主列簇的数据存放单元信息。
该第一分区的主列簇的数据存放单元信息包括K1层数据存放单元信息,其中K1为大于或等于1的正整数。该第二分区的主列簇的数据存放单元信息包括K2层数据存放单元信息,其中K2为大于或等于1的正整数。该第三分区的元数据包括第三分区的主列簇的数据存放单元信息,该第三分区的主列簇的数据存放单元信息包括K层数据存放单元信息,其中该第三分区的主列簇的数据存放单元信息的第k层数据存放单元信息包括该K1层数据存放单元信息的K层数据存放单元信息中的第k层数据存放单元信息和该K2层数据存放单元信息的K层数据存放单元信息中的第k层数据存放单元信息,其中K为K1与K2的最小值,其中该K1层数据存放单元信息的第k层数据存放单元信息中的任一个数据存放单元信息的条目键值和该K2层数据存放单元信息的第k层数据存放单元信息中的任一个数据存放单元信息的条目键值不重叠。
Mk1表示第一分区的主列簇的数据存放单元信息的K层数据存放单元信息中的第k层数据存放单元信息所包括的数据存放单元信息数目。例如,M01=2表示第一分区的主列簇的数据存放单元信息的level 0包括2个数据存放单元信息。Mk2表示第二分区的主列簇的数据存放单元信息的K层数据存放单元信息中的第k层数据存放单元信息所包括的数据存放单元信息数目。例如,M02=2表示第二分区的主列簇的数据存放单元信息的level 0包括2个数据存放单元信息。第三分区的主列簇的数据存放单元信息中的第k层数据存放单元信息所包括的数据存放单元信息数目是Mk1与Mk2的和。例如,假设M01=2且M02=2,则第三分区的主列簇的数据存放单元信息中的level 0中包括4个数据存放单元信息。
以采用LSM-tree算法的KVDB为例,清单文件中保存的SSTable信息是对应于K层SSTable信息。下面结合表6、表7和表8对主列簇的数据存放单元信息的合并进行描述。
表6
表6示出了第一分区的主列簇的数据存放单元信息包括两层数据存放单元信息,该两层数据存放单元信息中的每层数据存放单元信息包括2个数据存放单元信息。表6是以采用LSM-tree算法的KVDB为例得到的表。因此,相应的该数据存放单元信息也可以称为SSTable信息。
表7
表7示出了第二分区的主列簇的数据存放单元信息包括两层数据存放单元信息,该两层数据存放单元信息中的每层数据存放单元信息包括2个数据存放单元信息。表7是以采用LSM-tree算法的KVDB为例得到的表。因此,相应的该数据存放单元信息也可以称为SSTable信息。
表8
表8示出了第三分区的主列簇的数据存放单元信息包括两层数据存放单元信息,该两层数据存放单元信息中的每层数据存放单元信息包括4个数据存放单元信息。表8是以采用LSM-tree算法的KVDB为例得到的表。因此,相应的该数据存放单元信息也可以称为SSTable信息。可以看出,表8所示的level 0的SSTable信息包括表6和表7所示的level0的SSTable信息,表8所示的level 1的SSTable信息包括表6和表7所示的level 1的SSTable信息。
第一分区的主列簇的数据存放单元信息与第二分区的主列簇的数据存放单元信息都是以分区键值前缀的有序序列。由于分区是基于范围分区划分的,因此两个分区的主列簇存放单元信息中层与层之间的所有键值都没有范围上的重叠。因此可以直接将第二分区每个层的数据存放单元信息直接追加到第一分区的同层数据存放单元信息,从而形成一个分区的主列簇的数据存放单元信息。为便于描述,以下称这种一个分区中的一层数据存放单元信息直接追加到另一个分区中同层的数据存放单元信息的合并方式称为追加合并。
与第二列簇的数据存放单元信息类似,K1的取值与K2的取值也可以不同。在K1的取值与K2的取值不同的情况下,该第三分区包括的数据存放单元信息除K层数据存放单元信息外,还可以包括K’层数据存放单元,其中K’的取值为max(K1,K2)-min(K1,K2),其中max(K1,K2)表示K1与K2中的最大值,min(K1,K2)表示K1与K2中的最小值。换句话说,K’等于K1与K2中的最大值减去K1与K2中的最小值。或者K’的取值为|K1-K2|,即K’的取值为K1与K2之差的绝对值。若K1大于K2,则该K’层数据存放单元为该第一分区的K1层数据存放单元信息的最后K’层数据存放单元信息。若K2大于K1,则该K’层数据存放单元为该第一分区的K2层数据存放单元信息的最后K’层数据存放单元信息。
例如,假设K1=3,K2=2,在此情况下K=2,K’=1。在此情况下,该第一分区的清单文件中包括主列簇的3层SSTable信息,分别为第0层SSTable信息至第2层SStable信息。该第二分区的清单文件中包括主列簇的2层SSTable信息,分别为第0层SSTable信息和第1层SStable信息。该目标清单文件中包括主列簇的3层SSTable信息,分别为第0层SSTable信息至第2层SStable信息。
该目标清单文件中的第0层SSTable信息包括该第一分区的清单文件中主列簇的第0层SSTable信息和该第二分区的清单文件中主列簇的第0层SSTable信息。
该目标清单文件中的第1层SSTable信息包括该第一分区的清单文件中主列簇的第1层SSTable信息和该第二分区的清单文件中主列簇的第1层SSTable信息。
该目标清单文件中的第2层SSTable信息包括该第一分区的清单文件中主列簇的第2层SSTable信息。
来自于同一个分区的主/二级列簇的数据存放单元信息在合并后的主/二级列簇的数据存放单元信息内的先后顺序也不发生变化。
以主列簇的数据存放单元信息为例。如表6、表7和表8所示,SSTable f1.1.1在合并前位于SSTable f1.1.2之前。在合并之后,SSTable f1.1.1依然位于SSTable f1.1.2之前。
如表8所示,第三分区的主列簇的数据存放单元信息中,来自于第一分区的主列簇的数据存放单元信息的level 1的SSTable与第二分区的主列簇的数据存放单元信息的level 1的SSTable的先后顺序是:SSTable f1.1.1、SSTable f1.1.2、SSTable f2.1.1、SSTable f2.1.2。在一些实施例中,只要同一分区的主列簇的数据存放单元信息的先后顺序不发生变化就可以。换句话说,合并后的来自于另一分区的主列簇的数据存放单元信息可以位于该同一分区的主列簇的数据存放单元信息之前。例如,第三分区的主列簇的数据存放单元信息还可以如表9所示。
表9
如表9所示,第三分区的主列簇的数据存放单元信息中,来自于第一分区的主列簇的数据存放单元信息level 1的SSTable与第二分区的主列簇的数据存放单元信息的level1的SSTable的先后顺序是:SSTable f1.1.1、SSTable f2.1.1、SSTable f1.1.2、SSTablef2.1.2。可以看出,虽然SSTable f2.1.1位于SSTable f1.1.1与SSTable f1.1.2之间,但是SSTable f1.1.1依然位于SSTable f1.1.2之前。
二级列簇的数据存放单元信息的先后顺序与主列簇的数据存放单元信息的先后顺序是类似的,在此就不必赘述。
该第一分区的元数据还包括第一分区的预写日志信息集合。该第二分区的元数据包括第二分区的预写日志信息集合。
数据库服务器1可以合并该第一分区的预写日志信息集合与该第二分区的预写日志信息集合生成第三分区的预写日志信息集合。
该第三分区的预写日志信息集合包括N个预写日志信息,该第一分区的预写日志信息集合包括该N个预写日志信息中的N1个预写日志信息,该第二分区的预写日志信息集合包括该N个文件指示信息中的N2个预写日志信息,其中N为大于或等于2的正整数,N1和N2为大于或等于1的正整数且N1与N2的和为N。
换句话说,上述实施例中,数据库服务器1仅将第一分区的元数据中的第一预写日志信息集合所包括的预写日志信息与第二分区的元数据的第二预写日志信息集合所包括的预写日志信息合并为第三元数据信息内的第三预写日志信息集合。数据库服务器1并未将第一预写日志信息集合中的N1个预写日志信息所指示的N1个预写日志从该第一分区中读取,并将该N1个预写日志写入合并后的分区中。换句话说,在分区合并过程中仅需要对元数据信息内的预写日志信息进行合并,而无需对预写日志信息所指示的预写日志进行读写操作。预写日志信息的可以包括预写日志的标识以及预写日志的时间序列号。因此,该预写日志信息的大小通常是在KB数量级范围内的。而预写日志的大小通常是在MB数量级范围内。因此,相对于对预写日志的读写,对预写日志信息的读写可以减少读写数据量,从而减少分布式数据库系统开销。
还以采用LSM-tree算法的KVDB为例,预写日志信息可以是清单文件中保存的WAL文件信息。如上所述,WAL文件信息包括WAL文件的标识。可选的,还可以包含该WAL文件的时间序列号。以WAL文件信息包括WAL文件的标识以及该WAL文件的时间序列号为例,该第一分区的预写日志信息集合可以包括N1个WAL文件的标识以及该N1个WAL文件中的每个WAL文件的时间序列号,该第二分区的预写日志信息集合可以包括N2个WAL文件的标识以及该N2个WAL文件中的每个WAL文件的时间序列号。该第三分区的预写日志信息集合包括N1个WAL文件的标识以及该N1个WAL文件中的每个WAL文件的时间序列号,该第三分区的预写日志信息集合还可以包括该N2个WAL文件的标识以及该N2个WAL文件中的每个WAL文件的时间序列号。
在一些实施例中,第一预写日志信息和第二预写日志信息在该第一预写日志信息集合中的先后顺序与该第一预写日志信息和该第二预写日志信息在该第三预写日志信息集合中的先后顺序相同。该第一预写日志信息和该第二预写日志信息是该第一分区的预写日志信息集合包括的N1个预写日志中的任意两个预写日志信息。换句话说,在该第一分区的预写日志信息集合中,若该第一预写日志信息在该第二预写日志信息之前,则在该第三分区的预写日志信息集合中,该第一预写日志信息仍然在该第二预写日志信息之前。
类似的,第三预写日志信息和第四预写日志信息在该第二分区的预写日志信息集合中的先后顺序与该第三预写日志信息和该第四预写日志信息在该第三分区的预写日志信息集合中的先后顺序相同。该第三预写日志信息和该第四预写日志信息是该第二分区的预写日志信息集合包括的N2个预写日志中的任意两个预写日志信息。换句话说,在该第二分区的预写日志信息集合中,若该第三预写日志信息在该第四预写日志信息之前,则在该第三分区的预写日志信息集合中,该第三预写日志信息仍然在该第四预写日志信息之前。
表10示出了两个清单文件中的WAL文件信息的合并示意。
表10
第一分区 | 第二分区 | 第三分区 |
f1.w.9,f1.w.8 | f2.w.11,f2.w.7 | f1.w.9,f2.w.11,f1.w.8,f2.w.7 |
表10中以WAL文件的标识代表WAL文件信息,WAL文件的标识的先后顺序标识WAL文件的时间序列号。表10中所示的WAL文件的标识的排序是根据WAL文件的时间序列号排列的,右侧的WAL文件的标识的时间序列号低于左侧WAL文件的标识的时间序列号。
如表10所示,第一分区的清单文件1中包括两个WAL文件信息,该两个WAL文件的标识分别为:f1.w.8和f1.w.9,且f1.w.8的时间序列号低于f1.w.9的时间序列号。第二分区的清单文件2包括两个WAL文件信息,该两个WAL文件的标识分别为:f2.w.7和f1.w.11,且f2.w.7的时间序列号低于f1.w.11的时间序列号。
从表10中可以看出,第一分区的两个WAL文件信息与第二分区的两个WAL文件信息合并后,得到第三分区的清单文件3中的WAL文件信息。清单文件3中包括4个WAL文件信息。这4个WAL文件信息分别来自于清单文件1和清单文件2。此外,从表3中还可以看出,来自于清单文件1的两个WAL文件信息的先后顺序并未发生变化,f1.w.8在f1.w.9之前。类似的,来自于清单文件2的两个WAL文件信息的先后顺序并未发生变化,f2.w.7在f1.w.11之前。
311,数据库服务器1向管理服务器发送响应信息,该响应信息中包括第三分区的当前文件标识。
312,管理服务器更新分区路由表。
具体地,管理服务器将第一分区和第二分区标记为删除状态,并记录第三分区的左右边界和当前文件标识,第三分区的状态修改为正常。分区路由表中包含第三分区与数据库服务器1的映射关系,具体实现可以是第三分区的标识与数据库服务器的地址的映射关系。
313,管理服务器向数据库服务器1和数据库服务器2发送分区完成消息,该分区完成消息用于指示第一分区与第二分区完成合并。
第三分区的元数据中包含第一分区的元数据和第二分区的元数据。因此,以LSM-tree算法的KVDB为例,因为存储服务器存储相应分区的WAL文件,SSTable以及清单文件,本申请实施例提供的分区合并方案,数据库服务器1根据第三分区的元数据可以访问存储服务器中存储的第一分区和第二分区相应分区的WAL文件,SSTable以及清单文件,而不需要进行第一分区的数据条目和第二分区的数据条目的读出和写入操作即可实现了第一分区和第二分区的合并,从而减少了分区合并过程中读写数据量,提高了分区合并速度。另外,两个分区合并过程中,这两个分区的业务写入操作会被暂时冻结直到分区合并完成,本申请实施例也减少了分区的业务写入操作冻结时间。
314,数据库服务器1将第一分区的数据库关闭,并删除第一分区的当前文件和第一分区的元数据,向管理服务器发送成功响应,并将挂起的写请求返回重路由的错误响应,客户端收到重路由的错误响应消息后会重新向管理服务器发起请求更新分区路由表,然后将请求发送给新归属数据库服务器。
315,数据库服务器2将第二分区的数据库关闭,并删除第二分区的当前文件和第二分区的元数据,向管理服务器发送成功响应,并将挂起的写请求返回重路由的错误响应,客户端收到重路由的错误响应消息后会重新向管理服务器发起请求更新分区路由表,然后将请求发送给新归属数据库服务器。
316,管理服务器更新分区路由表,删除第一分区和第二分区的记录。
317、数据库服务器1后台启动层合并任务,以减少第三分区的元数据的层数。在合并完成前,第三分区不参与新的分区合并。
如前所述,在一些实施例中,数据服务器1可以根据该目标列簇的数据存放单元信息确定该第三分区的二级列簇的数据存放单元信息。该第三分区的二级列簇的数据存放单元信息包括P层数据存放单元信息,其中该第三分区的二级列簇的数据存放单元信息的P层数据单元存放信息中第1层数据存放单元信息是该Q层数据存放单元信息的第0层数据存放单元信息对应的数据存放单元进行归并重排后的得到的数据存放单元的数据存放单元信息,该第三分区的二级列簇的数据存放单元信息的P层数据单元存放信息中的第2层至第P-1层数据存放单元信息中的每层数据存放单元信息是该Q层数据存放单元信息的第1层数据存放单元信息至第Q-1层数据存放单元信息中的至少两层数据存放单元信息对应的数据存放单元进行归并重排后的得到的数据存放单元的数据存放单元信息。
数据服务器1根据该目标列簇的数据存放单元信息确定该第三分区的二级列簇的数据存放单元信息的过程就可以称为:层合并(level compaction)过程。
下面结合图4对层合并过程进行描述。
如图4所示的PT1层0表示该第一分区的二级列簇的数据存放单元信息中第0层的数据存放单元信息,PT2层0表示该第二分区的二级列簇的数据存放单元信息中第0层的数据存放单元信息,PT3层0表示该第三分区的二级列簇的数据存放单元信息中第0层的数据存放单元信息,以此类推。层0表示在根据该第一分区的二级列簇的数据存放单元信息与该第二分区的二级列簇的数据存放单元信息得到该第三分区的二级列簇的数据存放单元信息的过程中的第0层数据存放单元信息,层1表示在根据该第一分区的二级列簇的数据存放单元信息与该第二分区的二级列簇的数据存放单元信息得到该第三分区的二级列簇的数据存放单元信息的过程中的第1层数据存放单元信息,以此类推。real:30MB,表示当前level中的实际数据量为30MB,max:400MB表示设定的该层的最大数据量为400MB。
该第一分区的二级列簇的数据存放单元信息的层0数据存放单元信息与该第二分区的二级列簇的数据存放单元信息的层0数据存放单元信息通过追加合并得到目标二级列簇的数据存放单元信息的层0数据存放单元信息。该第一分区的二级列簇的数据存放单元信息的层1至层3数据存放单元信息与该第二分区的二级列簇的数据存放单元信息的层1至层3数据存放单元信息通过叠加合并得到目标二级列簇的数据存放单元的层1至层6的数据存放单元信息。
如图4所示,目标二级列簇的数据存放单元信息的0层数据存放单元信息包括该第一分区的二级列簇的数据存放单元信息的层0数据存放单元信息与该第二分区的二级列簇的数据存放单元信息的层0数据存放单元信息。
目标二级列簇的数据存放单元信息的层1数据存放单元信息包括第一分区的二级列簇的数据存放单元信息的层1数据存放单元信息。
目标二级列簇的数据存放单元信息的层2数据存放单元信息包括第二分区的二级列簇的数据存放单元信息的层1数据存放单元信息。
目标二级列簇的数据存放单元信息的层3数据存放单元信息包括第一分区的二级列簇的数据存放单元信息的层2数据存放单元信息。
目标二级列簇的数据存放单元信息的层4数据存放单元信息包括第二分区的二级列簇的数据存放单元信息的层2数据存放单元信息。
目标二级列簇的数据存放单元信息的层5数据存放单元信息包括第一分区的二级列簇的数据存放单元信息的层3数据存放单元信息。
目标二级列簇的数据存放单元信息的层6数据存放单元信息包括第二分区的二级列簇的数据存放单元信息的层3数据存放单元信息。
为便于描述,除非特殊说明,以下所称的层1数据存放单元信息就是指目标二级列簇的数据存放单元信息的层1数据存放单元信息,类似的,层2数据存放单元信息就是指目标二级列簇的数据存放单元信息的层2数据存放单元信息,以此类推。
为便于描述,还以采用LSM-tree算法的KVDB为例进行描述。相应的,数据存放单元信息为SSTable信息,
首先对归并排序示进行介绍。假设SSTable 1中的存储了如下内容:{Key01-Value,Key10-Value,Key19-Value,},假设SSTable 2中的存储了如下内容:{Key08-Value,Key12-Value,Key17-Value,}。其中Value中的数据是否相同并不重要,因为是按照Key来排序的。
归并排序过程如下:
1)申请第一空间,并读取SSTable 1和SSTable 2的内容到该第一空间中;
2)申请第二空间,第二空间的大小为SSTable 1和SSTable 2之和的大小,该第二空间用来存放合并后的SSTable内容;
3)设定两个指针,最初位置分别为SSTable 1和SSTable 2的起始的数据条目;
4)比较两个指针所指向的SSTable 1和SSTable 2中的数据条目,选择条目键值相对小的数据条目放入到该第二空间,并移动指针到下一位置,该第二空间中保存的数据条目就是合并后的SSTable;
5)重复步骤4直到某一指针达到SSTable 1和SSTable 2中的一个最后一个数据条目;
6)将另一SSTable剩下的所有数据条目直接复制到合并后的SSTable最后;
7),得到排序内容如下:{Key01-Value,Key08-Value,Key10-Value,Key12-Value,Key17-Value,Key19-Value,};
8)再将上述内容写入两个新的SSTable,SSTable 3和SSTable 4:
SSTable 3:{Key01-Value,Key08-Value,Key10-Value}
SSTable 4:{Key12-Value,Key17-Value,Key19-Value}。
层合并过程具体包括以下几步:
第一步,将层1SSTable信息所指示的所有SSTable与层2SSTable信息所指示的所有SSTable归并排序后,重新写入新的SSTable,并在清单文件中记录层2新增的SSTable对应的SSTable信息,同时将层1和层2原有的SSTable信息以及原有的SSTable信息所指示的SSTable标记删除。假设如图4所示的层1SSTable信息所指示的所有SSTable与层2SSTable信息所指示的所有SSTable均需要进行读写,则总读写数据量为200MB×2。
具体地,假设表11是层1SSTable信息与层2SSTable信息的示意。
表11
需要说明的是,由于对层1以及更高层,时间序列号无意义,因此表11和表12中没有包括时间序列号。
表11所示的层1SSTable信息对应的SSTable为f1a.1.1和f1a.1.2,层2SSTable信息对应的SSTable为f2a.1.1和f2a.1.2。新建SSTable f3a.1.1和f3a.1.2,将SSTable为f1a.1.1和f2a.1.1的内容归并排序后写入到新建的SSTable f3a.1.1和f3a.1.2中(参见前面的归并排序示例)。类似的,新建SSTable f3a.1.3和f3a.1.4,将SSTable为f1a.1.2和f2a.2.2的内容归并排序后写入到新建的SSTable f3a.1.3和f3a.1.4中。在清单文件中记录新增的SSTable对应的SSTable信息。在此情况下,该清单文件中记录的SSTable信息可以为表12所示。
表12
如表12所示,该清单文件中只包括新建的SSTable信息,原层1与层2的SSTable信息已经被删除。相应的,原层1与层2的SSTable信息所指示的SSTable也被删除。
通过上述合并过程,层1中没有数据,层2的数据翻倍。
以上例子中,层1SSTable信息所指示的所有SSTable与层2SSTable信息所指示的所有SSTable均有重叠,因此需要重新排序后写入新的SSTable。在当要归并的两个SSTable范围无重叠时,该SSTable内容不需重写。
第二步,将层0的SSTable进行归并排序后,重新写入新的SSTable,并在清单文件中记录新增的SSTable所对应的SSTable信息,新增的SSTable所对应的SSTable信息中的层标识为1。具体归并排序过程与步骤1类似,在此就不必赘述。假设如图4所示的层0的所有SSTable均需要进行读写,则总读写数据量为30MB×4。
第三步,将层3SSTable信息所指示的所有SSTable与层4SSTable信息所指示的所有SSTable归并排序后,重新写入新的SSTable,并在清单文件中记录层4新增的SSTable对应的SSTable信息,同时将层3和层4原有的SSTable信息以及原有的SSTable信息所指示的SSTable标记删除。层3增加只读标识,不再写入新的SSTable。假设如图4所示的层3SSTable信息所指示的所有SSTable与层4SSTable信息所指示的所有SSTable均需要进行读写,则总读写数据量为2GB×2。
第四步,将层5SSTable信息所指示的所有SSTable与层6SSTable信息所指示的所有SSTable归并排序后,重新写入新的SSTable,并在清单文件中记录层6新增的SSTable对应的SSTable信息,同时将层5和层6原有的SSTable信息以及原有的SSTable信息所指示的SSTable标记删除。层5增加只读标识,不再写入新的SSTable。假设如图4所示的层5SSTable信息所指示的所有SSTable与层6SSTable信息所指示的所有SSTable均需要进行读写,则总读写数据量为2GB×2。
第五步,删除层3与层5。具体操作如下:将清单文件中层标识为4的SSTable信息的层标识修改为3,将清单文件中层标识为6的SSTable信息的层标识修改为4,以此达到删除原层3和原层5的目的
第六步,将新的层2(即第一步得到的层2)SSTable信息所指示的所有SSTable与新的层3(即第五步得到的层2)SSTable信息所指示的所有SSTable归并排序后,重新写入新的SSTable,并在清单文件中记录新的层3新增的SSTable对应的SSTable信息,同时将新的层2和新的层3原有的SSTable信息以及原有的SSTable信息所指示的SSTable标记删除。将新的层2删除,清单文件中层标识为3的SSTable信息的层标识修改为2,将清单文件中层标识为4的SSTable信息的层标识修改为3。假设如图4所示的新的层2(即第一步得到的层2)SSTable信息所指示的所有SSTable与新的层3(即第五步得到的层2)SSTable信息均需要进行读写,则总读写数据量为400MB+4GB。
通过上述第一步至第六步,就得到该第三二级列簇的数据存放单元信息,以及第三二级列簇的数据存放单元信息对应的数据存放单元。
可以理解的是,第一步、第二步、第三步、第四步、第五步和第六步,这样的表述仅是为了便于区分不同的步骤,而并非是对步骤顺序的限定。通过上述六步的描述可以看出,第一步、第三步和第四步的先后顺序可以发生变化。
通过层合并处理,可以将数据存放单元的层数降低,这样可以便于查询该数据库中保存的数据条目。
当然,在一些实施例中,该数据库服务器1也可以不进行层合并处理。
本申请实施例提供的分布式数据库系统可以用于存储分布式对象存储系统的元数据,分布式文件系统的元数据或者分布式块存储系统的元数据。
图5是根据本申请实施例提供的数据库服务器的结构框图。如图5所示数据库服务器500包括:通信单元501和处理单元502。
通信单元501,用于接收管理服务器发送的合并指令,该合并指令用于实现将第一分区和第二分区合并为第三分区,其中该第一分区和该第二分区为相邻分区;该合并指令包含该第一分区的当前文件的标识和该第二分区的当前文件的标识;该第一分区的当前文件中记录有存储该第一分区的元数据的文件的文件标识;该第二分区的当前文件中记录有存储该第二分区的元数据的文件的文件标识,该第一分区运行于该数据库服务器,该第二分区运行于另一数据库服务器。
处理单元502用于:
根据该第一分区的当前文件的标识获取该第一分区的元数据。
根据该第二分区的当前文件的标识获取该第二分区的元数据;
合并该第一分区的元数据和该第二分区的元数据生成该第三分区的元数据。
图5所示的数据库服务器500的另一种实现中,通信单元501,用于接收管理服务器发送的合并指令,该合并指令用于实现将该第一分区和该第二分区合并为第三分区,其中该第一分区和该第二分区为相邻分区;处理单元502用于:根据该第一分区获取该第一分区的元数据和该第二分区的元数据,合并该第一分区的元数据和该第二分区的元数据生成该第三分区的元数据。
图5所示的数据库服务器500可以执行如图3所示的数据库服务器1执行的各个步骤。图5所示的数据库服务器500中各个单元的具体功能和有益效果可以参见图3所示的方法,在此就不必赘述。
一种可能的实现方式中,处理单元502可以由处理器实现,通信单元501可以由网络接口卡实现。在另一些实施例中,通信单元501还可以由总线适配器实现。通信单元501具体实现可以支持一种或多种访问协议,例如,以太报文协议、Infiniband协议等,本发明实施例对此不作限定。在另外一种实现中,通信单元501和处理单元502也可以由软件实现,或者由软件和硬件共同实现。
图6是根据本发明实施例提供的数据库服务器的结构框图。如图6所示,数据库服务器600包括处理器601和通信接口602。处理器601可以用于对数据进行处理,以及对数据库服务器进行控制,执行软件程序,处理软件程序的数据等。通信接口602主要用于通信,例如与分布式数据库系统中的管理服务器通信。
在本申请实施例中,可以将具有收发功能的电路视为数据库服务器的通信接口602,将具有处理功能的处理器视为数据库服务器600的处理器601。在一些实施例中,通信接口602可以由网络接口卡实现。在另一些实施例中,通信接口602还可以由总线适配器实现。通信接口602具体实现可以支持一种或多种访问协议,例如,以太报文协议、Infiniband协议等,本发明实施例对此不作限定。处理单元也可以称为处理器,处理单板,处理模块、处理装置等。
处理器601和通信接口602之间通过内部连接通路互相通信,传递控制和/或数据信号
上述本发明实施例揭示的方法可以应用于处理器601中,或者由处理器601实现。处理器601可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器601中的硬件的集成逻辑电路或者软件形式的指令完成。
本申请各实施例所述的处理器可以是通用处理器、数字信号处理器(digitalsignal processor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现成可编程门阵列(field programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存取存储器(random access memory,RAM)、闪存、只读存储器(read-only memory,ROM)、可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的指令,结合其硬件完成上述方法的步骤。
可选的,在一些实施例中,处理器601可以是中央处理单元(Central ProcessingUnit,CPU)与存储器的组合,其中存储器可以存储用于执行如图3所示方法中数据库服务器1执行的方法的指令。CPU可以执行存储器中存储的指令结合其他硬件(例如通信接口602)完成如图3所示方法中数据库服务器1执行的步骤,具体工作过程和有益效果可以参见图3所示实施例中的描述。
本申请实施例还提供一种芯片,该芯片包括收发单元和处理单元。其中,收发单元可以是输入输出电路、通信接口;处理单元为该芯片上集成的处理器或者微处理器或者集成电路。该芯片可以执行上述方法实施例中数据库服务器1执行的方法。
本申请实施例还提供一种计算机可读存储介质,其上存储有计算机指令,该计算机指令被执行时执行上述方法实施例中数据库服务器1执行的方法。
本申请实施例还提供一种包含计算机指令的计算机程序产品,该计算机指令被执行时执行上述方法实施例中数据库服务器1执行的方法。
图7是根据本申请实施例提供的管理服务器的结构框图。如图7所示管理服务器700包括:通信单元701和处理单元702。
处理单元702,用于创建第三分区,确定将第一分区和第二分区合并为该第三分区。
通信单元701,用于向第一数据库服务器发送的合并指令,该合并指令用于实现将该第一分区和该第二分区合并为该第三分区,其中该第一分区和该第二分区为相邻分区;该合并指令包含该第一分区的当前文件的标识和该第二分区的当前文件的标识;该第一分区的当前文件中记录有存储该第一分区的元数据的文件的文件标识;该第二分区的当前文件中记录有存储该第二分区的元数据的文件的文件标识,该第一分区运行于该第一数据库服务器,该第二分区运行于第二数据库服务器。
在管理服务器700的另一种实现中,处理单元702,用于创建第三分区,确定将第一分区和第二分区合并为该第三分区。
通信单元701,用于向第一数据库服务器发送的合并指令,该合并指令用于实现将该第一分区和该第二分区合并为该第三分区,其中该第一分区和该第二分区为相邻分区;该第一分区运行于该第一数据库服务器,该第二分区运行于第二数据库服务器。
图7所示的管理服务器700可以执行如图3所示的管理服务器执行的各个步骤。图7所示的管理服务器700中各个单元的具体功能和有益效果可以参见图3所示的方法,在此就不必赘述。
一种可能的实现方式中,处理单元702可以由处理器实现,通信单元701可以由网络接口卡实现。在另一些实施例中,通信单元701还可以由总线适配器实现。通信单元701具体实现可以支持一种或多种访问协议,例如,以太报文协议、Infiniband协议等,本发明实施例对此不作限定。
图8是根据本发明实施例提供的管理服务器的结构框图。如图8所示,管理服务器800包括处理器801和通信接口802。处理器801可以用于对数据进行处理,以及对管理服务器800进行控制,执行软件程序,处理软件程序的数据等。在本申请实施例中,可以将具有收发功能的电路视为数据库服务器的通信接口802,将具有处理功能的处理器视为数据库服务器的处理器801。关于管理服务器800的具体描述可参考数据库服务器600的描述,在此不再赘述。
本申请实施例还提供一种计算机可读存储介质,其上存储有计算机指令,该计算机指令被执行时执行上述方法实施例中管理服务器执行的方法。
本申请实施例还提供一种包含计算机指令的计算机程序产品,该计算机指令被执行时执行上述方法实施例中管理服务器执行的方法。
本领域技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干计算机指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储计算机指令的介质。
Claims (34)
1.一种分布式数据库系统中分区合并方法,其特征在于,所述分布式数据库系统包括第一数据库服务器、第二数据库服务器和管理服务器,所述第一数据库服务器运行第一分区,所述第二数据库服务器运行第二分区,其中所述第一分区和所述第二分区为相邻分区;所述方法包括:
所述第一数据库服务器接收管理服务器发送的合并指令,所述合并指令用于实现将所述第一分区和所述第二分区合并为第三分区;所述合并指令包含所述第一分区的当前文件的标识和所述第二分区的当前文件的标识;所述第一分区的当前文件中记录有存储所述第一分区的元数据的文件的文件标识;所述第二分区的当前文件中记录有存储所述第二分区的元数据的文件的文件标识;
所述第一数据库创建对应于所述第三分区的数据库;
所述第一数据库服务器根据所述第一分区的当前文件的标识获取所述第一分区的元数据;
所述第一数据库服务器根据所述第二分区的当前文件的标识获取所述第二分区的元数据;
所述第一数据库服务器合并所述第一分区的元数据和所述第二分区的元数据生成所述第三分区的元数据。
2.如权利要求1所述的方法,其特征在于,所述第一分区的元数据包括所述第一分区的二级列簇的数据存放单元信息,所述第二分区的元数据包括所述第二分区的二级列簇的数据存放单元信息,
所述第一数据库服务器合并所述第一分区的元数据和所述第二分区的元数据生成所述第三分区的元数据,具体包括:
所述第一数据库服务器合并所述第一分区的二级列簇的数据存放单元信息和所述第二分区的二级列簇的数据存放单元信息生成目标二级列簇的数据存放单元信息;
根据所述目标二级列簇的数据存放单元信息确定所述第三分区的二级列簇的数据存放单元信息。
3.如权利要求2所述的方法,其特征在于,所述第一分区的二级列簇的数据存放单元信息包括P1层数据存放单元信息,其中P1为大于或等于2的正整数;
所述第二分区的二级列簇的数据存放单元信息包括P2层数据存放单元信息,其中P2为大于或等于2的正整数;
所述目标二级列簇的数据存放单元信息包括Q层数据存放单元信息,所述Q层数据存放单元信息包括所述第一分区的二级列簇的数据存放单元信息和所述第二分区的二级列簇的数据存放单元信息,其中,
所述Q层数据存放单元信息的一层数据存放单元信息包括所述第一分区的二级列簇的数据存放单元信息包括的P1层数据存放单元信息中的一层数据存放单元信息和所述第二分区的二级列簇的数据存放单元信息包括的P2层数据存放单元信息中的一层数据存放单元信息,
所述Q层数据存放单元信息的Q-1层数据存放单元信息中的一层数据存放单元信息包括所述第一分区的二级列簇的数据存放单元信息包括的P1层数据存放单元信息中的一层数据存放单元信息或者所述第二分区的二级列簇的数据存放单元信息包括的P2层数据存放单元信息中的一层数据存放单元信息,其中Q等于P1+P2-1。
4.如权利要求3所述的方法,其特征在于,所述Q层数据存放单元信息中的第0层数据存放单元信息包括所述第一分区的二级列簇的数据存放单元信息的第0层数据存放单元信息和所述第二分区的二级列簇的数据存放单元信息的第0层数据存放单元信息,
所述Q层数据存放单元信息中的第2×q-1层数据存放单元信息包括所述第一分区的二级列簇的数据存放单元信息包括的P1层数据存放单元信息中P层数据存放单元信息的第q层数据存放单元信息,所述Q层数据存放单元 信息中的第2×q层数据存放单元信息包括所述第二分区的二级列簇的数据存放单元信息包括的P2层数据存放单元信息中P层数据存放单元信息的第q层数据存放单元信息,q=1,……,P-1,其中P的取值为P1与P2中的最小值减1。
5.如权利要求3所述的方法,其特征在于,所述Q层数据存放单元信息中的第0层数据存放单元信息包括所述第一分区的二级列簇的数据存放单元信息的第0层数据存放单元信息和所述第二分区的二级列簇的数据存放单元信息的第0层数据存放单元信息,
所述Q层数据存放单元信息中的第1层数据存放单元信息至第P-1层数据存放单元信息分别为所述第一分区的二级列簇的数据存放单元信息包括的P1层数据存放单元信息中P层数据存放单元信息的中的第1层数据存放单元信息至第P-1层数据存放单元信息;
所述Q层数据存放单元信息中的第P层数据存放单元信息至第Q-1层数据存放单元信息分别为所述第二分区的二级列簇的数据存放单元信息包括的P2层数据存放单元信息中P层数据存放单元信息的中的第1层数据存放单元信息至第P-1层数据存放单元信息,其中P的取值为P1与P2中的最小值减1。
6.如权利要求4或5所述的方法,其特征在于,所述方法还包括:所述数据库服务器根据所述目标二级列簇的数据存放单元信息,确定所述第三分区的二级列簇的数据存放单元信息,其中所述第三分区的二级列簇的数据存放单元信息包括P层数据存放单元信息,其中所述第三分区的二级列簇的数据存放单元信息的P层数据存放单元 信息中第1层数据存放单元信息是所述Q层数据存放单元信息的第0层数据存放单元信息对应的数据存放单元进行归并重排后的得到的数据存放单元的数据存放单元信息,所述第三分区的二级列簇的数据存放单元信息的P层数据存放单元 信息中的第2层至第P-1层数据存放单元信息中的每层数据存放单元信息是所述Q层数据存放单元信息的第1层数据存放单元信息至第Q-1层数据存放单元信息中的至少两层数据存放单元信息对应的数据存放单元进行归并重排后的得到的数据存放单元的数据存放单元信息。
7.如权利要求2至5中任一项所述的方法,其特征在于,所述二级列簇的数据存放单元信息中的每个数据存放单元信息中的条目键值的前缀是非分区键值。
8.如权利要求1至5中任一项所述的方法,其特征在于,所述第一分区的元数据还包括所述第一分区的预写日志信息集合,所述第二分区的元数据还包括所述第二分区的预写日志信息集合,所述方法还包括:
所述数据库服务器合并所述第一分区的预写日志信息集合和所述第二分区的预写日志信息集合生成所述第三分区的预写日志信息集合,其中,所述第三分区的预写日志信息集合包括所述第一分区的预写日志信息集合中的预写日志信息以及所述第二分区的预写日志信息集合中的预写日志信息,其中N为大于或等于2的正整数,N1和N2为大于或等于1的正整数且N1与N2的和为N。
9.如权利要求1至5中任一项所述的方法,其特征在于,所述第一分区的元数据还包括所述第一分区的主列簇的数据存放单元信息,所述第二分区的元数据还包括所述第二分区的主列簇的数据存放单元信息,所述方法还包括:所述数据库服务器合并所述第一分区的主列簇的数据存放单元信息和所述第二分区的主列簇的数据存放单元信息成生所述第三分区的主列簇的数据存放单元信息。
10.如权利要求9所述的方法,其特征在于,所述第一分区的主列簇的数据存放单元信息包括K1层数据存放单元信息,其中K1为大于或等于1的正整数,
所述第二分区的主列簇的数据存放单元信息包括K2层数据存放单元信息,其中K2为大于或等于1的正整数;
所述第三分区的主列簇的数据存放单元信息包括K层数据存放单元信息,其中所述第三分区的主列簇的数据存放单元信息包括的K层数据存放单元信息中的第k层数据存放单元信息包括所述K1层数据存放单元信息的K层数据存放单元信息中的第k层数据存放单元信息和所述K2层数据存放单元信息的K层数据存放单元信息中的第k层数据存放单元信息,其中K为K1与K2的最小值,其中所述K1层数据存放单元信息的第k层数据存放单元信息中的任一个数据存放单元信息的条目键值和所述K2层数据存放单元信息的第k层数据存放单元信息中的任一个数据存放单元信息的条目键值不重叠。
11.如权利要求9所述的方法,其特征在于,所述主列簇的数据存放单元信息中的每个数据存放单元信息中的条目键值的前缀是分区键值。
12.一种数据库服务器,其特征在于,所述数据库服务器包括:
通信单元,用于接收管理服务器发送的合并指令,所述合并指令用于实现将第一分区和第二分区合并为第三分区,其中所述第一分区和所述第二分区为相邻分区;所述合并指令包含所述第一分区的当前文件的标识和所述第二分区的当前文件的标识;所述第一分区的当前文件中记录有存储所述第一分区的元数据的文件的文件标识;所述第二分区的当前文件中记录有存储所述第二分区的元数据的文件的文件标识,所述第一分区运行于所述数据库服务器,所述第二分区运行于另一数据库服务器;
处理单元用于:
创建对应于所述第三分区的数据库;
根据所述第一分区的当前文件的标识获取所述第一分区的元数据;
根据所述第二分区的当前文件的标识获取所述第二分区的元数据;
合并所述第一分区的元数据和所述第二分区的元数据生成所述第三分区的元数据。
13.如权利要求12所述的数据库服务器,其特征在于,所述第一分区的元数据包括所述第一分区的二级列簇的数据存放单元信息,所述第二分区的元数据包括所述第二分区的二级列簇的数据存放单元信息,
所述处理单元,具体用于合并所述第一分区的二级列簇的数据存放单元信息和所述第二分区的二级列簇的数据存放单元信息生成目标二级列簇的数据存放单元信息;
根据所述目标二级列簇的数据存放单元信息确定所述第三分区的二级列簇的数据存放单元信息。
14.如权利要求13所述的数据库服务器,其特征在于,所述第一分区的二级列簇的数据存放单元信息包括P1层数据存放单元信息,其中P1为大于或等于2的正整数;
所述第二分区的二级列簇的数据存放单元信息包括P2层数据存放单元信息,其中P2为大于或等于2的正整数;
所述目标二级列簇的数据存放单元信息包括Q层数据存放单元信息,所述Q层数据存放单元信息包括所述第一分区的二级列簇的数据存放单元信息和所述第二分区的二级列簇的数据存放单元信息,其中,
所述Q层数据存放单元信息的一层数据存放单元信息包括所述第一分区的二级列簇的数据存放单元信息包括的P1层数据存放单元信息中的一层数据存放单元信息和所述第二分区的二级列簇的数据存放单元信息包括的P2层数据存放单元信息中的一层数据存放单元信息,
所述Q层数据存放单元信息的Q-1层数据存放单元信息中的一层数据存放单元信息包括所述第一分区的二级列簇的数据存放单元信息包括的P1层数据存放单元信息中的一层数据存放单元信息或者所述第二分区的二级列簇的数据存放单元信息包括的P2层数据存放单元信息中的一层数据存放单元信息,其中Q等于P1+P2-1。
15.如权利要求14所述的数据库服务器,其特征在于,所述Q层数据存放单元信息中的第0层数据存放单元信息包括所述第一分区的二级列簇的数据存放单元信息的第0层数据存放单元信息和所述第二分区的二级列簇的数据存放单元信息的第0层数据存放单元信息,
所述Q层数据存放单元信息中的第2×q-1层数据存放单元信息包括所述第一分区的二级列簇的数据存放单元信息包括的P1层数据存放单元信息中P层数据存放单元信息的第q层数据存放单元信息,所述Q层数据存放单元 信息中的第2×q层数据存放单元信息包括所述第二分区的二级列簇的数据存放单元信息包括的P2层数据存放单元信息中P层数据存放单元信息的第q层数据存放单元信息,q=1,……,P-1,其中P的取值为P1与P2中的最小值减1。
16.如权利要求14所述的数据库服务器,其特征在于,所述Q层数据存放单元信息中的第0层数据存放单元信息包括所述第一分区的二级列簇的数据存放单元信息的第0层数据存放单元信息和所述第二分区的二级列簇的数据存放单元信息的第0层数据存放单元信息,
所述Q层数据存放单元信息中的第1层数据存放单元信息至第P-1层数据存放单元信息分别为所述第一分区的二级列簇的数据存放单元信息包括的P1层数据存放单元信息中P层数据存放单元信息的中的第1层数据存放单元信息至第P-1层数据存放单元信息;
所述Q层数据存放单元信息中的第P层数据存放单元信息至第Q-1层数据存放单元信息分别为所述第二分区的二级列簇的数据存放单元信息包括的P2层数据存放单元信息中P层数据存放单元信息的中的第1层数据存放单元信息至第P-1层数据存放单元信息,其中P的取值为P1与P2中的最小值减1。
17.如权利要求15或16所述的数据库服务器,其特征在于,所述处理单元,还用于根据所述目标二级列簇的数据存放单元信息,确定所述第三分区的二级列簇的数据存放单元信息,其中所述第三分区的二级列簇的数据存放单元信息包括P层数据存放单元信息,其中所述第三分区的二级列簇的数据存放单元信息的P层数据存放单元 信息中第1层数据存放单元信息是所述Q层数据存放单元信息的第0层数据存放单元信息对应的数据存放单元进行归并重排后的得到的数据存放单元的数据存放单元信息,所述第三分区的二级列簇的数据存放单元信息的P层数据存放单元 信息中的第2层至第P-1层数据存放单元信息中的每层数据存放单元信息是所述Q层数据存放单元信息的第1层数据存放单元信息至第Q-1层数据存放单元信息中的至少两层数据存放单元信息对应的数据存放单元进行归并重排后的得到的数据存放单元的数据存放单元信息。
18.如权利要求13至16中任一项所述的数据库服务器,其特征在于,所述二级列簇的数据存放单元信息中的每个数据存放单元信息中的条目键值的前缀是非分区键值。
19.如权利要求12至16中任一项所述的数据库服务器,其特征在于,所述第一分区的元数据还包括所述第一分区的预写日志信息集合,所述第二分区的元数据还包括所述第二分区的预写日志信息集合,所述处理单元,还用于合并所述第一分区的预写日志信息集合和所述第二分区的预写日志信息集合生成所述第三分区的预写日志信息集合,其中,所述第三分区的预写日志信息集合包括所述第一分区的预写日志信息集合中的预写日志信息以及所述第二分区的预写日志信息集合中的预写日志信息,其中N为大于或等于2的正整数,N1和N2为大于或等于1的正整数且N1与N2的和为N。
20.如权利要求12至16中任一项所述的数据库服务器,其特征在于,所述第一分区的元数据还包括所述第一分区的主列簇的数据存放单元信息,所述第二分区的元数据还包括所述第二分区的主列簇的数据存放单元信息,所述处理单元,还用于合并所述第一分区的主列簇的数据存放单元信息和所述第二分区的主列簇的数据存放单元信息生成所述第三分区的主列簇的数据存放单元信息。
21.如权利要求20所述的数据库服务器,其特征在于,所述第一分区的主列簇的数据存放单元信息包括K1层数据存放单元信息,其中K1为大于或等于1的正整数,
所述第二分区的主列簇的数据存放单元信息包括K2层数据存放单元信息,其中K2为大于或等于1的正整数;
所述第三分区的主列簇的数据存放单元信息包括K层数据存放单元信息,其中所述第三分区的主列簇的数据存放单元信息包括的K层数据存放单元信息中的第k层数据存放单元信息包括所述K1层数据存放单元信息的K层数据存放单元信息中的第k层数据存放单元信息和所述K2层数据存放单元信息的K层数据存放单元信息中的第k层数据存放单元信息,其中K为K1与K2的最小值,其中所述K1层数据存放单元信息的第k层数据存放单元信息中的任一个数据存放单元信息的条目键值和所述K2层数据存放单元信息的第k层数据存放单元信息中的任一个数据存放单元信息的条目键值不重叠。
22.如权利要求20所述的数据库服务器,其特征在于,所述主列簇的数据存放单元信息中的每个数据存放单元信息中的条目键值的前缀是分区键值。
23.一种数据库服务器,其特征在于,所述数据库服务器包括通信接口和处理器,所述通信接口和所述处理器通信;其中,
所述通信接口,用于接收管理服务器发送的合并指令,所述合并指令用于实现将第一分区和第二分区合并为第三分区,其中所述第一分区和所述第二分区为相邻分区;所述合并指令包含所述第一分区的当前文件的标识和所述第二分区的当前文件的标识;所述第一分区的当前文件中记录有存储所述第一分区的元数据的文件的文件标识;所述第二分区的当前文件中记录有存储所述第二分区的元数据的文件的文件标识,所述第一分区运行于所述数据库服务器,所述第二分区运行于另一数据库服务器;
所述处理器用于:
创建对应于所述第三分区的数据库;
根据所述第一分区的当前文件的标识获取所述第一分区的元数据;
根据所述第二分区的当前文件的标识获取所述第二分区的元数据;
合并所述第一分区的元数据和所述第二分区的元数据生成所述第三分区的元数据。
24.如权利要求23所述的数据库服务器,其特征在于,所述第一分区的元数据包括所述第一分区的二级列簇的数据存放单元信息,所述第二分区的元数据包括所述第二分区的二级列簇的数据存放单元信息,
所述处理器,具体用于合并所述第一分区的二级列簇的数据存放单元信息和所述第二分区的二级列簇的数据存放单元信息生成目标二级列簇的数据存放单元信息;
根据所述目标二级列簇的数据存放单元信息确定所述第三分区的二级列簇的数据存放单元信息。
25.如权利要求24所述的数据库服务器,其特征在于,所述第一分区的二级列簇的数据存放单元信息包括P1层数据存放单元信息,其中P1为大于或等于2的正整数;
所述第二分区的二级列簇的数据存放单元信息包括P2层数据存放单元信息,其中P2为大于或等于2的正整数;
所述目标二级列簇的数据存放单元信息包括Q层数据存放单元信息,所述Q层数据存放单元信息包括所述第一分区的二级列簇的数据存放单元信息和所述第二分区的二级列簇的数据存放单元信息,其中,
所述Q层数据存放单元信息的一层数据存放单元信息包括所述第一分区的二级列簇的数据存放单元信息包括的P1层数据存放单元信息中的一层数据存放单元信息和所述第二分区的二级列簇的数据存放单元信息包括的P2层数据存放单元信息中的一层数据存放单元信息,
所述Q层数据存放单元信息的Q-1层数据存放单元信息中的一层数据存放单元信息包括所述第一分区的二级列簇的数据存放单元信息包括的P1层数据存放单元信息中的一层数据存放单元信息或者所述第二分区的二级列簇的数据存放单元信息包括的P2层数据存放单元信息中的一层数据存放单元信息,其中Q等于P1+P2-1。
26.如权利要求25所述的数据库服务器,其特征在于,所述Q层数据存放单元信息中的第0层数据存放单元信息包括所述第一分区的二级列簇的数据存放单元信息的第0层数据存放单元信息和所述第二分区的二级列簇的数据存放单元信息的第0层数据存放单元信息,
所述Q层数据存放单元信息中的第2×q-1层数据存放单元信息包括所述第一分区的二级列簇的数据存放单元信息包括的P1层数据存放单元信息中P层数据存放单元信息的第q层数据存放单元信息,所述Q层数据存放单元 信息中的第2×q层数据存放单元信息包括所述第二分区的二级列簇的数据存放单元信息包括的P2层数据存放单元信息中P层数据存放单元信息的第q层数据存放单元信息,q=1,……,P-1,其中P的取值为P1与P2中的最小值减1。
27.如权利要求25所述的数据库服务器,其特征在于,所述Q层数据存放单元信息中的第0层数据存放单元信息包括所述第一分区的二级列簇的数据存放单元信息的第0层数据存放单元信息和所述第二分区的二级列簇的数据存放单元信息的第0层数据存放单元信息,
所述Q层数据存放单元信息中的第1层数据存放单元信息至第P-1层数据存放单元信息分别为所述第一分区的二级列簇的数据存放单元信息包括的P1层数据存放单元信息中P层数据存放单元信息的中的第1层数据存放单元信息至第P-1层数据存放单元信息;
所述Q层数据存放单元信息中的第P层数据存放单元信息至第Q-1层数据存放单元信息分别为所述第二分区的二级列簇的数据存放单元信息包括的P2层数据存放单元信息中P层数据存放单元信息的中的第1层数据存放单元信息至第P-1层数据存放单元信息,其中P的取值为P1与P2中的最小值减1。
28.如权利要求26或27所述的数据库服务器,其特征在于,所述处理器,还用于根据所述目标二级列簇的数据存放单元信息,确定所述第三分区的二级列簇的数据存放单元信息,其中所述第三分区的二级列簇的数据存放单元信息包括P层数据存放单元信息,其中所述第三分区的二级列簇的数据存放单元信息的P层数据存放单元 信息中第1层数据存放单元信息是所述Q层数据存放单元信息的第0层数据存放单元信息对应的数据存放单元进行归并重排后的得到的数据存放单元的数据存放单元信息,所述第三分区的二级列簇的数据存放单元信息的P层数据存放单元 信息中的第2层至第P-1层数据存放单元信息中的每层数据存放单元信息是所述Q层数据存放单元信息的第1层数据存放单元信息至第Q-1层数据存放单元信息中的至少两层数据存放单元信息对应的数据存放单元进行归并重排后的得到的数据存放单元的数据存放单元信息。
29.如权利要求24至27中任一项所述的数据库服务器,其特征在于,所述二级列簇的数据存放单元信息中的每个数据存放单元信息中的条目键值的前缀是非分区键值。
30.如权利要求23至27中任一项所述的数据库服务器,其特征在于,所述第一分区的元数据还包括所述第一分区的预写日志信息集合,所述第二分区的元数据还包括所述第二分区的预写日志信息集合,所述处理器,还用于合并所述第一分区的预写日志信息集合和所述第二分区的预写日志信息集合生成所述第三分区的预写日志信息集合,其中,所述第三分区的预写日志信息集合包括所述第一分区的预写日志信息集合中的预写日志信息以及所述第二分区的预写日志信息集合中的预写日志信息,其中N为大于或等于2的正整数,N1和N2为大于或等于1的正整数且N1与N2的和为N。
31.如权利要求23至27中任一项所述的数据库服务器,其特征在于,所述第一分区的元数据还包括所述第一分区的主列簇的数据存放单元信息,所述第二分区的元数据还包括所述第二分区的主列簇的数据存放单元信息,所述处理器,还用于合并所述第一分区的主列簇的数据存放单元信息和所述第二分区的主列簇的数据存放单元信息生成所述第三分区的主列簇的数据存放单元信息。
32.如权利要求31所述的数据库服务器,其特征在于,所述第一分区的主列簇的数据存放单元信息包括K1层数据存放单元信息,其中K1为大于或等于1的正整数,
所述第二分区的主列簇的数据存放单元信息包括K2层数据存放单元信息,其中K2为大于或等于1的正整数;
所述第三分区的主列簇的数据存放单元信息包括K层数据存放单元信息,其中所述第三分区的主列簇的数据存放单元信息包括的K层数据存放单元信息中的第k层数据存放单元信息包括所述K1层数据存放单元信息的K层数据存放单元信息中的第k层数据存放单元信息和所述K2层数据存放单元信息的K层数据存放单元信息中的第k层数据存放单元信息,其中K为K1与K2的最小值,其中所述K1层数据存放单元信息的第k层数据存放单元信息中的任一个数据存放单元信息的条目键值和所述K2层数据存放单元信息的第k层数据存放单元信息中的任一个数据存放单元信息的条目键值不重叠。
33.如权利要求31所述的数据库服务器,其特征在于,所述主列簇的数据存放单元信息中的每个数据存放单元信息中的条目键值的前缀是分区键值。
34.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包含计算机指令,当数据库服务器运行所述计算机指令,使得所述数据库服务器执行如权利要求1至权利要求11中任一项权利要求所述的方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2019/097559 WO2020034818A1 (zh) | 2018-08-14 | 2019-07-24 | 分区合并方法和数据库服务器 |
EP19849439.5A EP3825866A4 (en) | 2018-08-14 | 2019-07-24 | PARTITION MERGER PROCESS AND DATABASE SERVER |
US17/171,706 US11762881B2 (en) | 2018-08-14 | 2021-02-09 | Partition merging method and database server |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810919475 | 2018-08-14 | ||
CN2018109194759 | 2018-08-14 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110825794A CN110825794A (zh) | 2020-02-21 |
CN110825794B true CN110825794B (zh) | 2022-03-29 |
Family
ID=69547428
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811147298.3A Active CN110825794B (zh) | 2018-08-14 | 2018-09-29 | 分区合并方法和数据库服务器 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11762881B2 (zh) |
EP (1) | EP3825866A4 (zh) |
CN (1) | CN110825794B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11822582B2 (en) * | 2022-01-20 | 2023-11-21 | Snowflake Inc. | Metadata clustering |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111737261B (zh) * | 2020-06-24 | 2023-09-22 | 山东大学 | 基于LSM-Tree的压缩日志缓存方法及装置 |
CN112667644B (zh) * | 2021-01-20 | 2023-02-21 | 浪潮云信息技术股份公司 | 一种混合索引内存数据库存储引擎管理方法 |
CN112527804B (zh) * | 2021-01-27 | 2022-09-16 | 中智关爱通(上海)科技股份有限公司 | 文件存储方法、文件读取方法和数据存储系统 |
US11797510B2 (en) * | 2021-04-20 | 2023-10-24 | Netapp, Inc. | Key-value store and file system integration |
KR102545480B1 (ko) * | 2021-07-29 | 2023-06-20 | 단국대학교 산학협력단 | 존 스토리지에서의 키-값 스토어 파일 저장 장치 및 방법 |
US20240045602A1 (en) * | 2022-08-03 | 2024-02-08 | Capital One Services, Llc | Systems and methods for adaptive data partitioning within cluster systems |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102521234A (zh) * | 2010-10-28 | 2012-06-27 | 微软公司 | 在线数据库的分区 |
CN103473321A (zh) * | 2013-09-12 | 2013-12-25 | 华为技术有限公司 | 数据库管理方法与系统 |
CN103593436A (zh) * | 2013-11-12 | 2014-02-19 | 华为技术有限公司 | 文件合并方法和装置 |
CN104765794A (zh) * | 2015-03-25 | 2015-07-08 | 深圳市创梦天地科技有限公司 | 一种数据库分区方法及装置 |
CN105872098A (zh) * | 2016-06-03 | 2016-08-17 | 腾讯科技(深圳)有限公司 | 数据处理方法、负载均衡器和交互式应用服务器及系统 |
CN107689977A (zh) * | 2016-08-05 | 2018-02-13 | 厦门雅迅网络股份有限公司 | 分布式缓存和推送的路由方法及其系统 |
CN107943412A (zh) * | 2016-10-12 | 2018-04-20 | 阿里巴巴集团控股有限公司 | 一种分区分裂、删除分区中数据文件的方法、装置及系统 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9355109B2 (en) * | 2010-06-11 | 2016-05-31 | The Research Foundation For The State University Of New York | Multi-tier caching |
US9081837B2 (en) * | 2010-10-28 | 2015-07-14 | Microsoft Technology Licensing, Llc | Scoped database connections |
US20140280375A1 (en) * | 2013-03-15 | 2014-09-18 | Ryan Rawson | Systems and methods for implementing distributed databases using many-core processors |
CN105095287B (zh) * | 2014-05-14 | 2018-09-28 | 华为技术有限公司 | Lsm数据合并排序方法和装置 |
US9965497B2 (en) * | 2014-05-29 | 2018-05-08 | Oracle International Corporation | Moving data between partitions |
CN106156168B (zh) | 2015-04-16 | 2019-10-22 | 华为技术有限公司 | 在跨分区数据库中查询数据的方法及跨分区查询装置 |
US20170193041A1 (en) * | 2016-01-05 | 2017-07-06 | Sqrrl Data, Inc. | Document-partitioned secondary indexes in a sorted, distributed key/value data store |
US10496283B2 (en) * | 2016-01-22 | 2019-12-03 | Suraj Prabhakar WAGHULDE | Adaptive prefix tree based order partitioned data storage system |
CN106844650A (zh) * | 2017-01-20 | 2017-06-13 | 中国科学院计算技术研究所 | 一种日志合并树的合并方法及系统 |
US11029862B2 (en) * | 2017-04-25 | 2021-06-08 | Netapp, Inc. | Systems and methods for reducing write tax, memory usage, and trapped capacity in metadata storage |
US10764045B2 (en) * | 2017-06-30 | 2020-09-01 | Microsoft Technology Licensing, Llc | Encrypting object index in a distributed storage environment |
CN115129782A (zh) | 2018-06-27 | 2022-09-30 | 北京奥星贝斯科技有限公司 | 一种分布式数据库的分区级连接方法和装置 |
US11100071B2 (en) * | 2018-10-10 | 2021-08-24 | Micron Technology, Inc. | Key-value store tree data block spill with compaction |
US10909102B2 (en) * | 2018-12-06 | 2021-02-02 | Vmware, Inc. | Systems and methods for performing scalable Log-Structured Merge (LSM) tree compaction using sharding |
US11675745B2 (en) * | 2020-11-13 | 2023-06-13 | Vmware, Inc. | Scalable I/O operations on a log-structured merge (LSM) tree |
-
2018
- 2018-09-29 CN CN201811147298.3A patent/CN110825794B/zh active Active
-
2019
- 2019-07-24 EP EP19849439.5A patent/EP3825866A4/en active Pending
-
2021
- 2021-02-09 US US17/171,706 patent/US11762881B2/en active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102521234A (zh) * | 2010-10-28 | 2012-06-27 | 微软公司 | 在线数据库的分区 |
CN103473321A (zh) * | 2013-09-12 | 2013-12-25 | 华为技术有限公司 | 数据库管理方法与系统 |
CN103593436A (zh) * | 2013-11-12 | 2014-02-19 | 华为技术有限公司 | 文件合并方法和装置 |
CN104765794A (zh) * | 2015-03-25 | 2015-07-08 | 深圳市创梦天地科技有限公司 | 一种数据库分区方法及装置 |
CN105872098A (zh) * | 2016-06-03 | 2016-08-17 | 腾讯科技(深圳)有限公司 | 数据处理方法、负载均衡器和交互式应用服务器及系统 |
CN107689977A (zh) * | 2016-08-05 | 2018-02-13 | 厦门雅迅网络股份有限公司 | 分布式缓存和推送的路由方法及其系统 |
CN107943412A (zh) * | 2016-10-12 | 2018-04-20 | 阿里巴巴集团控股有限公司 | 一种分区分裂、删除分区中数据文件的方法、装置及系统 |
Non-Patent Citations (2)
Title |
---|
基于分片一致性哈希负载均衡策略与应用;苏跃明等;《计算机技术与发展》;20171211(第11期);第62-65页 * |
对象管理的空间连接策略与算法;曹加恒等;《武汉大学学报(自然科学版)》;19981010(第05期);第585-588页 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11822582B2 (en) * | 2022-01-20 | 2023-11-21 | Snowflake Inc. | Metadata clustering |
Also Published As
Publication number | Publication date |
---|---|
EP3825866A4 (en) | 2021-08-25 |
US20210165805A1 (en) | 2021-06-03 |
CN110825794A (zh) | 2020-02-21 |
US11762881B2 (en) | 2023-09-19 |
EP3825866A1 (en) | 2021-05-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110825794B (zh) | 分区合并方法和数据库服务器 | |
US11082206B2 (en) | Layout-independent cryptographic stamp of a distributed dataset | |
CN103874980B (zh) | 存储系统中的映射 | |
CN106021266B (zh) | 支持动态更新的快速多层索引 | |
US9684702B2 (en) | Database redistribution utilizing virtual partitions | |
CN104025010B (zh) | 存储系统中的可变长度编码 | |
US6473774B1 (en) | Method and apparatus for record addressing in partitioned files | |
CN105786408B (zh) | 闪存阵列中的逻辑扇区映射 | |
CN108804510A (zh) | 键值文件系统 | |
WO2017065885A1 (en) | Distributed pipeline optimization data preparation | |
CN105468473A (zh) | 数据迁移方法及数据迁移装置 | |
CN107667363A (zh) | 具有多种可选数据处理策略的基于对象的存储集群 | |
JPWO2005086003A1 (ja) | データベース・システム | |
CN105868421A (zh) | 一种数据管理方法及装置 | |
US10592153B1 (en) | Redistributing a data set amongst partitions according to a secondary hashing scheme | |
CN109976669A (zh) | 一种边缘存储方法、装置和存储介质 | |
US11868328B2 (en) | Multi-record index structure for key-value stores | |
WO2017065888A1 (en) | Step editor for data preparation | |
US10534765B2 (en) | Assigning segments of a shared database storage to nodes | |
CN108304142A (zh) | 一种数据管理方法和装置 | |
CN108804571B (zh) | 一种数据存储方法、装置以及设备 | |
US20210034292A1 (en) | Encoded virtual block deferred reference counting | |
CN103970671B (zh) | 用于在存储器中分配管理数据集的系统和方法 | |
US11281387B2 (en) | Multi-generational virtual block compaction | |
WO2020034818A1 (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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20220208 Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province Applicant after: Huawei Cloud Computing Technology Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Applicant before: HUAWEI TECHNOLOGIES Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |