CN117235185B - 数据平衡处理方法、装置及电子设备 - Google Patents
数据平衡处理方法、装置及电子设备 Download PDFInfo
- Publication number
- CN117235185B CN117235185B CN202311488523.0A CN202311488523A CN117235185B CN 117235185 B CN117235185 B CN 117235185B CN 202311488523 A CN202311488523 A CN 202311488523A CN 117235185 B CN117235185 B CN 117235185B
- Authority
- CN
- China
- Prior art keywords
- data
- partition
- data storage
- bucket
- data set
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 30
- 238000005192 partition Methods 0.000 claims abstract description 509
- 238000013500 data storage Methods 0.000 claims abstract description 506
- 238000003860 storage Methods 0.000 claims abstract description 151
- 238000000034 method Methods 0.000 claims abstract description 108
- 238000012545 processing Methods 0.000 claims description 35
- 238000009826 distribution Methods 0.000 claims description 30
- 230000011218 segmentation Effects 0.000 claims description 28
- 238000004364 calculation method Methods 0.000 claims description 26
- 230000001960 triggered effect Effects 0.000 claims description 12
- 238000001914 filtration Methods 0.000 claims description 11
- 238000012546 transfer Methods 0.000 claims description 6
- 238000004064 recycling Methods 0.000 claims description 2
- 230000008569 process Effects 0.000 abstract description 40
- 238000010586 diagram Methods 0.000 description 22
- 230000033001 locomotion Effects 0.000 description 21
- 238000004590 computer program Methods 0.000 description 15
- 238000013461 design Methods 0.000 description 14
- 238000000638 solvent extraction Methods 0.000 description 14
- 230000001360 synchronised effect Effects 0.000 description 10
- 238000013523 data management Methods 0.000 description 9
- 238000004422 calculation algorithm Methods 0.000 description 8
- 230000006870 function Effects 0.000 description 8
- 230000008901 benefit Effects 0.000 description 7
- 238000013508 migration Methods 0.000 description 7
- 230000005012 migration Effects 0.000 description 7
- 238000013459 approach Methods 0.000 description 6
- 230000000903 blocking effect Effects 0.000 description 6
- 238000004458 analytical method Methods 0.000 description 5
- 230000000712 assembly Effects 0.000 description 4
- 238000000429 assembly Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 4
- 238000004140 cleaning Methods 0.000 description 4
- 238000002360 preparation method Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 230000003068 static effect Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000011010 flushing procedure Methods 0.000 description 2
- 230000037406 food intake Effects 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 230000010076 replication Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000033228 biological regulation Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000007596 consolidation process Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000013524 data verification Methods 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000011065 in-situ storage Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007774 longterm Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 238000010926 purge Methods 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- 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
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书实施例公开了一种数据平衡处理方法、装置及电子设备,该方法包括:将数据采用分区、分桶存储的方式,在接收到数据平衡请求后,获取各个节点的本地数据存储目录,再基于本地数据存储目录确定出各个分区数据集的分区负载和桶负载。基于分区负载和桶负载对各个分区数据集中的数据存储桶进行重新分配,将分区负载最大的分区数据集中的桶负载最小的数据存储桶分配到分区负载最小的分区数据集,并记录重新分配过程中的待移动数据存储桶和对应的目标分区数据集,进而将待移动数据存储桶中的数据移动到对应的目标分区数据集。利用本说明书提供的技术方案,移动部分数据存储桶就可以实现系统中的数据平衡,保证了数据库存储系统的系统性能的稳定。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据平衡处理方法、装置及电子设备。
背景技术
随着计算机的发展,数据的种类和数量越来越多,数据库存储系统的种类和数量也越来越多。数据库存储系统中的数据需要进行合理的管理,以确保数据的准确以及数据查询、处理的效率。随着摩尔定律的结束和信息时代的到来,数据管理系统利用机群来处理快速增长的大量数据。因此基于共享无系统的并行数据管理系统由于其可扩展性而被广泛使用。在无共享的并行数据管理系统中,记录被分片到一个节点集群中,这些节点通过互连网络相互通信,使得这些系统在节点数量增加时可以水平扩展。数据库存储系统中存储有大量的数据,如何实现数据库存储系统中各个节点的数据平衡,是保证系统性能和查询效率的关键。
早期的并行数据管理系统,通常假设节点集群相对静态,然而这个假设现在已经不成立了,动态调整集群大小是可取的,有很多原因,例如:在云计算时代,动态地调整集群大小可以在工作负载发生变化时更经济。此外,随着存储数据随时间积累,集群也需要扩展才能更好地服务于查询工作负载,为了扩展集群存储的记录必须重新平衡,以便可以被重新分区到新的节点集合中。不管是数据库存储系统中各个节点对于数据的存储,还是需要对系统中的数据进行调整,都需要尽量保证系统中数据的平衡,才能使得系统具有良好的性能。
因此,如何提供一种数据平衡处理方案,能够保证数据库存储系统的数据平衡,确保系统的性能,是本领域亟需解决的技术问题。
发明内容
本说明书实施例提供了一种数据平衡处理方法、装置、设备、存储介质、计算机程序产品,实现了数据库存储系统的数据平衡,提升了数据库存储系统的性能。
一方面,本说明书实施例提供了一种数据平衡处理方法,所述方法应用于数据库存储系统,所述方法包括:
接收节点移除或新增节点触发的数据平衡请求,并获取所述数据库存储系统中各个节点的本地数据存储目录;所述本地数据存储目录用于表征各个节点中的数据在各个节点的分区数据集中的数据存储桶中的存储路径;
根据各个节点的本地数据存储目录,确定出各个节点中分区数据集的分区负载和数据存储桶的桶负载;
从各个节点的分区数据集中选择分区负载最大的第一分区数据集和分区负载最小的第二分区数据集;
将所述第一分区数据集中桶负载最小的数据存储桶预分配到所述第二分区数据集中,分别计算数据存储桶预分配前后所述第一分区数据集和所述第二分区数据集之间的分配前负载差异和分配后负载差异,若所述分配后负载差异小于所述分配前负载差异,则将所述桶负载最小的数据存储桶转移至所述第二分区数据集对应的本地数据存储目录,将所述桶负载最小的数据存储桶作为待移动数据存储桶,将所述第二分区数据集作为所述待移动数据存储桶的目标分区数据集,并返回所述从各个节点的分区数据集中选择所述分区负载最大的第一分区数据集和所述分区负载最小的第二分区数据集的步骤,直至所述第一分区数据集和所述第二分区数据集的分配后负载差异大于或等于分配前负载差异;
将所述待移动数据存储桶中的数据移动至对应的目标分区数据集,以实现所述数据库存储系统中的数据平衡。
另一方面提供了一种数据平衡处理装置,所述装置应用于数据库存储系统,所述装置包括:
节点目录获取模块,用于接收节点移除或新增节点触发的数据平衡请求,并获取所述数据库存储系统中各个节点的本地数据存储目录;所述本地数据存储目录用于表征各个节点中的数据在各个节点的分区数据集中的数据存储桶中的存储路径;
负载计算模块,用于根据各个节点的本地数据存储目录,确定出各个节点中分区数据集的分区负载和数据存储桶的桶负载;
分区数据集选择模块,用于从各个节点的分区数据集中选择分区负载最大的第一分区数据集和分区负载最小的第二分区数据集;
桶重新分配模块,用于将所述第一分区数据集中桶负载最小的数据存储桶预分配到所述第二分区数据集中,分别计算数据存储桶预分配前后所述第一分区数据集和所述第二分区数据集之间的分配前负载差异和分配后负载差异,若所述分配后负载差异小于所述分配前负载差异,则将所述桶负载最小的数据存储桶转移至所述第二分区数据集对应的本地数据存储目录,将所述桶负载最小的数据存储桶作为待移动数据存储桶,将所述第二分区数据集作为所述待移动数据存储桶的目标分区数据集,并返回所述从各个节点的分区数据集中选择所述分区负载最大的第一分区数据集和所述分区负载最小的第二分区数据集的步骤,直至所述第一分区数据集和所述第二分区数据集的分配后负载差异大于或等于分配前负载差异;
数据移动模块,用于将所述待移动数据存储桶中的数据移动至对应的目标分区数据集,以实现所述数据库存储系统中的数据平衡。
另一方面提供了一种电子设备,包括:处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现上述任一项所述的数据平衡处理方法。
另一方面提供了一种计算机可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行上述任一数据平衡处理方法。
另一方面提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各种可选实现方式中提供的数据平衡处理方法。
本说明书实施例提供的数据平衡处理方法、装置、设备、存储介质、计算机程序产品,具有如下技术效果:
本说明书实施例提供的数据平衡处理方法,将数据采用分区、分桶存储的方式,在接收到数据平衡请求后,获取各个节点的本地数据存储目录,再基于本地数据存储目录确定出各个分区数据集的分区负载和桶负载。基于分区负载选择出分区负载最大的第一分区数据集和分区负载最小的第二分区数据集,并基于桶负载对第一分区数据集和第二分区数据集中的数据存储桶进行重新分配。再基于重新分配后的各个节点对应的本地数据存储目录,重新选择分区负载最大的第一分区数据集和分区负载最小的第二分区数据集,进行数据存储桶的重新分配,直至第一分区数据集和第二分区数据集的分配后负载差异大于或等于分配前负载差异。记录数据存储桶重新分配过程中确定出的待移动数据存储桶和其对应的目标分区数据集,进而可以将待移动数据存储桶中的数据移动到对应的目标分区数据集。只需要移动部分数据存储桶就可以实现数据库存储系统中各个分区数据集的数据平衡,减少了数据平衡时数据移动的数量和成本,并且可以保证各个分区数据集之间的分区负载的差异尽量小,确保各个节点中的数据保持平衡,保证了数据库存储系统的系统性能的稳定。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案和优点,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本说明书的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它附图。
图1是本说明书实施例提供的一种数据平衡处理方法的应用环境的示意图;
图2是本说明书一个实施例提供的数据平衡处理方法的流程示意图;
图3是本说明书一个实施例中数据平衡处理时数据移动的过程示意图;
图4是本说明书一个实施例中LSM结合哈希表的数据结构示意图;
图5是本说明书一个实施例中哈希分区和动态分桶的原理示意图;
图6是本说明书一个实施例中数据存储桶分割的示意图;
图7是本说明书一些实施例中数据库存储系统数据再平衡的处理流程示意图;
图8是本说明书实施例提供的一种数据平衡处理装置的结构示意图;
图9是本说明书实施例提供的一种用于数据平衡处理电子设备的框图;
图10是本说明书实施例提供的另一种用于数据平衡处理电子设备的框图。
具体实施方式
下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本说明书保护的范围。
需要说明的是,本说明书实施例的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本说明书的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或服务器不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
请参阅图1,图1是本说明书实施例提供的一种数据平衡处理方法的应用环境的示意图,该应用环境至少可以包括服务器100和终端200。
在一个可选的实施例中,服务器100可以用于接收终端200发送的数据或数据平衡请求,进而将数据进行存储或对存储的数据进行平衡处理。服务器100可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。
在一个可选的实施例中,终端200可以是向服务端100发送数据或数据平衡请求的终端设备,如:可以是智能手机、台式计算机、平板电脑、笔记本电脑、智能穿戴设备、车载设备等类型的电子设备;也可以为运行于上述电子设备的软体,例如应用程序、小程序等。本说明书实施例中电子设备上运行的操作系统可以包括但不限于安卓系统、IOS系统、linux、windows等。
此外,需要说明的是,图1所示的仅仅是一种数据平衡处理方法的应用环境的示意图,本说明书实施例并不以上述为限。
本说明书实施例中,上述服务器100和终端200可以通过有线或无线通信方式进行直接或间接地连接,本说明书实施例在此不做限制。
本说明书实施例中的数据平衡处理方法,在系统数据出现变化后,可以有效的进行数据重新平衡,主要面向互联网产品的后台数据库存储系统。本发明设计的数据再平衡算法可以应用于许多数据库产品,包括但不限于以下几个方面:
1)关系型数据库:本发明装置可以帮助关系型数据库更好地处理数据倾斜和不平衡的情况,从而提高查询和分析的效率和准确性。
2)NoSQL数据库:数据再平衡算法可以帮助NoSQL数据库更好地处理大规模数据的存储和查询,从而提高数据处理和分析的效率和准确性。
3)数据仓库:数据再平衡可以帮助数据仓库更好地处理大规模数据的存储和查询,从而提高数据分析和决策的效率和准确性。
4)分布式数据库:可以帮助分布式数据库更好地处理数据分布不均和负载不平衡的情况,从而提高数据处理和查询的效率和准确性。
5)内存数据库:可以帮助内存数据库更好地处理大规模数据的存储和查询,从而提高数据处理和分析的效率和准确性。
总之,本说明书实施例提供给的数据平衡处理方法可以应用于许多数据库产品,帮助提高数据库的处理能力、效率和准确性。
本说明书实施例中的数据平衡处理方法可以面向分析(OLAP,Online AnalyticalProcessing,联机分析处理)工作负载的无共享并行数据管理系统的数据再平衡,无共享并行管理系统已被广泛用于利用机器集群进行高效和可扩展的数据处理。当需要动态地缩放集群时,必须有效地重新平衡数据。理想情况下数据平衡应该具有低的数据移动成本,在数据摄取和查询处理上产生小的开销,并且在线执行而不会阻塞读取或写入,然而现有的并行数据管理系统在有效的数据重新平衡方面经常存在一定的限制和缺点。
为了利用群集节点提供的并行性,必须使用分区函数将数据集的记录分布到每个节点上。分区函数根据其分区键确定性地将每个记录分配给一个节点。例如:分区函数包括范围分区和哈希分区,范围分区将键空间划分为一组范围,并将每个范围分配给一个节点,相反哈希分区通过操作哈希键来实现更好的负载平衡。
当群集需要进行缩放时,其数据集必须通过重新平衡过程进行重新分区。一般来说重新平衡有三个重要的权衡,即负载平衡、平衡成本和正常操作开销。负载平衡衡量数据在不同节点之间分布的均匀程度。这直接影响查询性能,因为在共享无处系统中,查询时间受到最慢节点的限制。平衡成本衡量在重新平衡期间需要访问和移动多少数据。最后正常操作开销衡量为了支持重新平衡操作的需求而进行的任何额外开销,用于正常的读写操作。
以下介绍本说明书实施例一种数据平衡处理方法,图2是本说明书一个实施例提供的数据平衡处理方法的流程示意图,本说明书提供了如实施例或流程图的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的系统或服务器产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。该方法可以应用于计算机、平板电脑、智能手机等终端设备上,当然,根据实际需要也可以应用在服务器中,本说明书实施例对此不做具体限定。具体的如图2所示,该方法可以应用于数据库存储系统,数据库存储系统可以用于存储一些数据或记录,并支持在该数据库存储系统中进行数据管理和查询,如:在一些实施例中,数据库存储系统可以为无共享并行数据管理系统。数据库存储系统中可以包括有多个节点,将数据库存储系统中的数据分布到多个节点进行存储,每个节点中可以包括一个或多个分区数据集,每个分区数据集存储在一个或多个数据存储桶中。如图2所示,所述方法可以包括:
S202:接收节点移除或新增节点触发的数据平衡请求,并获取数据库存储系统中各个节点的本地数据存储目录;本地数据存储目录用于表征各个节点中的数据在各个节点的分区数据集中的数据存储桶中的存储路径。
在具体的实施过程中,数据库存储系统中可以包括多个节点,每个节点上存储有一个或多个分区数据集,分区数据集采用数据存储桶的方式进行存储。也就是说,可以将数据库存储系统中的数据先进行分区,将数据划分为多个分区数据集,再将分区数据集分配给不同的节点,再对各个分区数据集的数据进行分桶处理,将每个分区数据集的存储在不同的数据存储桶中。数据库存储系统中可以有一个全局目录,全局目录中可以存储有各个节点上数据的存储记录,每个节点可以对应有一个本地数据存储目录,本地数据存储目录中可以用于表征该节点的数据的存储路径记录,如:一个节点中的数据存储在该节点的哪个分区数据集,以及存储在分区数据集中的哪个数据存储桶中。本地数据存储目录可以用于记录节点本地分配的数据存储桶。例如:节点1中的本地数据存储目录中可以包括节点1中的分区数据集1和分区数据集2对应的数据存储桶,以及分区数据集1中的数据A存储在数据存储桶1中,分区数据集1中的数据B存储在数据存储桶2中,分区数据集2中的数据C存储在数据存储桶3中的数据存储路径的信息。
当数据库存储系统中有新增节点或者需要删除节点或系统中数据分布不均时,就会触发数据平衡处理,数据库存储系统会接收到数据平衡请求。即当数据库存储系统中的数据集发生变化时,需要对数据库存储系统中的数据进行调整,确保数据库存储系统中的数据平衡,以保证系统的性能。在接收到数据平衡请求后,可以获取各个节点的本地数据存储目录,其中,数据库存储系统中可以包括有一个集群控制器和多个节点控制器,集群控制器可以用来协调各个节点控制器执行不同的任务,每个节点控制器可以用于控制一个节点中的一个或多个分区数据集,以利用现代硬件的并行性,在系统中,查询被编译并优化为作业任务,并由节点控制器执行。每个节点控制器可以管理节点的本地数据,各个节点本地的数据的变化一般不会通知集群控制器,当需要进行数据平衡时,集群控制器可以通过各个节点控制器获取各个节点的本地数据存储目录。
S204:根据各个节点的本地数据存储目录,确定出各个节点中分区数据集的分区负载和数据存储桶的桶负载。
在具体的实施过程中,在获取各个本地数据存储目录后,可以获取各个节点中各个分区数据集对应的分区负载和数据存储桶对应的桶负载,其中,分区负载可以用于表征分区数据集中数据的大小,桶负载可以用于表征一个数据存储桶中存储的数据的大小。分区负载和桶负载的计算方式可以根据实际需要进行选择,本说明书实施例不做具体限定。本说明书一些实施例中,可以定一个标准化大小的概念,用来表征负载的大小,例如:给定深度为的全局目录和深度为/>的数据存储桶/>,我们将数据存储桶/>的标准化大小(表示为)定义为/>,给定一个分区数据集/>或一个节点/>,将/>或/>表示为/>的数据存储桶和/>的数据存储桶的标准化大小之和。
S206:从各个节点的分区数据集中选择分区负载最大的第一分区数据集和分区负载最小的第二分区数据集。
在具体的实施过程中,在确定出数据库存储系统中各个分区数据集对应的分区负载和各个数据存储桶对应的桶负载后,可以基于分区负载的大小,从各个分区数据集中筛选出分区负载最大的分区数据集作为第一分区数据集,分区负载最小的分区数据集作为第二分区数据集。
S208:将第一分区数据集中桶负载最小的数据存储桶预分配到第二分区数据集中,分别计算数据存储桶预分配前后第一分区数据集和第二分区数据集之间的分配前负载差异和分配后负载差异,若分配后负载差异小于分配前负载差异,则将桶负载最小的数据存储桶转移至第二分区数据集对应的本地数据存储目录,将桶负载最小的数据存储桶作为待移动数据存储桶,将第二分区数据集作为待移动数据存储桶的目标分区数据集,并返回从各个节点的分区数据集中选择分区负载最大的第一分区数据集和分区负载最小的第二分区数据集的步骤,直至第一分区数据集和第二分区数据集的分配后负载差异大于或等于分配前负载差异。
在具体的实施过程中,在从各个分区数据集中筛选出分区负载最大的第一分区数据集和分区负载最小的分第二分区数据集后,可以根据第一分区数据集和第二分区数据集中各个数据存储桶的桶负载的大小,对第一分区数据集和第二分区数据集中的数据存储桶进行重新分配,来平衡第一分区数据集和第二分区数据集中的数据。具体的,可以先计算第一分区数据集和第二分区数据集之间的分配前负载差异,如:可以将数据存储桶重新分配前第一分区数据集和第二分区数据集的分区负载的差值的绝对值作为该分配前负载差异,将第一分区数据集中桶负载最小的数据存储桶分配到第二分区数据集中,再计算数据存储桶重新分配后第一分区数据集和第二分区数据集之间的分配后负载差异。比较第一分区数据集和第二分区数据集的分配前负载差异和分配后负载差异的大小,若分配后负载差异小于分配前负载差异,这说明这用数据存储桶的重新分配方式能够缩小第一分区数据集和第二分区数据集之间的负载差异,保存这种分配方式,并将该第一分区数据集中的桶负载最小的数据存储桶从第一分区数据集对应的本地数据存储目录中转移到第二分区数据集对应的本地数据存储目录。也就是说,将第一分区数据集中的桶负载最小的数据存储桶从第一分区数据集对应的本地数据存储目录中删除,在第二分区数据集对应的本地数据存储目录中增加该第一分区数据集中的桶负载最小的数据存储桶,以更新第一分区数据集和第二分区数据集对应的本地数据存储目录。
同时,将这种分配方式中确定出的第一分区数据集中的桶负载最小的数据存储桶作为待移动数据存储桶,将第二分区数据集作为该待移动数据存储桶对应的目标分区数据集,可以记录该待移动数据存储桶和其对应的目标分区数据集。
在对第一分区数据集和第二分区数据集进行数据存储桶的重新分配后,各个分区数据集的分区负载发生了变化,之前的第一分区数据集的分区负载可能不是分区负载最大的分区数据集了,之前的第二分区数据集的分区负载可能也不是分区负载最小的分区数据集了。此时,可以返回步骤S206,循环执行步骤S206-S208,对各个分区数据集中的数据存储桶进行重新分配,直至各个分区数据集中的分区负载的差异符合要求。
具体的,可以根据更新后的本地数据存储目录,重新在各个分区数据集中确定出新的第一分区数据集和第二分区数据集,其中,第一分区数据集仍是当前分区负载最大的分区数据集,第二分区数据集仍是当前分区负载最小的分区数据集。再对新的第一分区数据集和新的第二分区数据集进行数据存储桶的重新分配,分配的过程可以参考上述实施例中桶分配的过程,即将新的第一分区数据集中桶负载最小的数据存储桶分配到新的第二分区数据集中,比较新的第一分区数据集和新的第二分区数据集之间分配前负载差异和分配后负载差异的大小,来确定是否保存该分配方式,若分配后负载差异小于分配前负载差异,则保存该分配方式,将新的第一分区数据集中桶负载最小的数据存储桶从该新的第一分区数据集的本地数据存储目录转移到新的第二分区数据集的本地数据存储目录中,更新各自的本地数据存储目录。重复这一过程,基于更新后的本地数据存储目录重新选择第一分区数据集和第二分区数据集,对第一分区数据集和第二分区数据集进行数据存储桶的重新分配,直至第一分区数据集和第二分区数据集的分配后负载差异大于或等于分配前负载差异,这说明这种数据存储桶的重新分配方式不能缩小第一分区数据集和第二分区数据集之间的负载差异,分区负载最大的第一分区数据集和分区负载最小的第二分区数据集之间的负载差异已经足够小,也就是说,各个分区数据集之间的分区负载的差异不大,不需要再进行数据重新分配,结束循环过程,完成各个分区数据集的数据存储桶的重新分配。可以记录每一次重新分配过程中确定出的待移动数据存储桶和其对应的目标分区数据集。
需要说明的是,将第一分区数据集中桶负载最小的数据存储桶预分配到第二分区数据集中的“预分配”是指当前只是确定出数据移动的方案,确定出数据平衡后的各个节点对应的本地数据存储目录,还没有将待移动数据存储桶中的数据移动到对应的目标分区数据集。
S210:将待移动数据存储桶中的数据移动至对应的目标分区数据集,以实现所述数据库存储系统中的数据平衡。
在具体的实施过程中,确定出待移动数据存储桶和其对应的目标分区数据集后,可以将待移动数据存储桶中的数据移动到其对应的目标分区数据集,进而实现了数据库存储系统中的数据平衡,保障了数据库存储系统的性能。本说明书实施例提供的数据平衡方法,只需要移动部分数据存储桶,就可以实现数据库存储系统的数据平衡,减少了数据平衡的成本。
此外,在数据平衡处理之前,可以保存数据库存储系统对应的原始全局目录的副本以及各个节点对应的本地数据存储目录的副本,方便数据平衡期间数据查询等需要,该原始全局目录中可以包括接收到数据平衡请求时所有节点对应的本地数据存储目录。在对各个节点中的分区数据集的数据存储桶进行重新分配后,可以基于重新分配后获得的各个节点的本地数据存储目录,获得更新全局记录,更新全局记录中可以存储有重新进行数据存储桶的分配后,所有节点的本地数据存储目录。可以通过将更新全局目录与原始全局目录进行比对的方式,确定出待移动数据存储桶和待移动数据存储桶对应的目标分区数据集,进而可以将待移动数据存储桶中的数据移动到其对应的目标分区数据集。
本说明书一些实施例中,将待移动数据存储桶移动至对应的目标分区数据集,包括:
将不同节点对应的多个待移动数据存储桶分配给不同的线程,采用不同的线程将待移动数据存储桶移动至对应的目标分区数据集。
在具体的实施过程中,本说明书实施例可以将每个节点的处理任务分配给多个线程来完成,将不同节点对应的多个待移动数据存储桶分别由多个线程同步移动至对应的目标分区数据集中,从而充分发挥每个节点的计算能力,提高了再平衡效率。
此外,本说明书一些实施例中,所述方法还包括:
将接收到数据平衡请求之前各个数据存储桶中的存储数据保存在桶快照中;
将接收到数据平衡请求之后各个数据存储桶中的写入数据复制到对应的目标分区数据集中。
在具体的实施过程中,在数据平衡操作期间,某些数据可能被并发编写器更新,这可能需要相应地应用于其旧分区和新分区。对于需要移动的每个数据存储桶,都必须应用这些并发写入,因为数据平衡操作可能失败。为了确保并发写入的正确性,本说明书实施例中使用基于数据平衡开始时间将所有写入拆分为数据存储桶的并发控制协议。对于在数据平衡操作开始前发生的所有写入,将创建一个不可变的桶快照,以便可以安全地扫描。快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。数据平衡操作开始之前所有的写入操作(即数据平衡请求之前各个数据存储桶中的存储数据)都会被保存在一个不可变的桶快照中,这个桶快照之后通常不需要写入到新分区,因为它主要用于数据一致性和安全扫描。对于在数据平衡操作开始后发生的所有写入,它们的日志记录将复制到新分区数据集,以确保如果数据平衡操作成功,则不会丢失任何写入。系统使用数据平衡操作开始的时间作为一个标记点,以区分哪些写入操作是在数据平衡开始之前发生的,哪些是在数据平衡操作之后发生的,从而确保了数据平衡前后数据的一致性。
本说明书实施例提供的数据平衡处理方法,将数据采用分区、分桶存储的方式,在接收到数据平衡请求后,获取各个节点的本地数据存储目录,再基于本地数据存储目录确定出各个分区数据集的分区负载和桶负载。基于分区负载选择出分区负载最大的第一分区数据集和分区负载最小的第二分区数据集,并基于桶负载对第一分区数据集和第二分区数据集中的数据存储桶进行重新分配。再基于重新分配后的各个节点对应的本地数据存储目录,重新选择分区负载最大的第一分区数据集和分区负载最小的第二分区数据集,进行数据存储桶的重新分配,直至第一分区数据集和第二分区数据集的分配后负载差异大于或等于分配前负载差异。记录数据存储桶重新分配过程中确定出的待移动数据存储桶和其对应的目标分区数据集,进而可以将待移动数据存储桶中的数据移动到对应的目标分区数据集。只需要移动部分数据存储桶就可以实现数据库存储系统中各个分区数据集的数据平衡,减少了数据平衡时数据移动的数量和成本,并且可以保证各个分区数据集之间的分区负载的差异尽量小,确保各个节点中的数据保持平衡,保证了数据库存储系统的系统性能的稳定。
本说明书一些实施例中,数据平衡请求为移除指定节点触发的,根据各个节点的本地数据存储目录,确定出各个节点中分区数据集的分区负载和数据存储桶的桶负载,包括:
根据各个节点的本地数据存储目录,确定出各个节点中分区数据集的原始分区负载和数据存储桶的桶负载;
将指定节点中的数据存储桶分配给原始分区负载最小的分区数据集中;
更新各个节点的本地数据存储目录,并根据更新后的本地数据存储目录,获得各个节点中分区数据集的分区负载。
在具体的实施过程中,参见上述实施例的记载,当数据库存储系统中某些节点被移除时,会触发数据平衡操作。在这种场景下,在接收到数据平衡请求后,可以先根据各个节点的本地数据存储目录,确定出各个节点中分区数据集的原始分区负载和数据存储桶的桶负载,再将被移除的指定节点中的数据存储桶分配给分区负载最小的分区数据集中,再更新各个节点的本地数据存储目录,基于更新后的本地数据存储目录,获得各个节点中分区数据集对应的分区负载。
本说明书实施例中,在移除指定节点触发数据平衡操作时,先将移除的节点的数据分配到分区负载最小的分区数据集中,再对各个分区数据集中的数据存储桶进行重新分配,避免因节点移除,移除节点中的数据丢失的问题,确保系统中数据的完整性和准确性。
本说明书一些实施例中,每个数据存储桶中包括内存组件和磁盘组件,所述本地数据存储目录中包括各个节点中每个分区数据集对应的主索引,主索引采用日志结构合并树格式,并通过日志结构合并树格式将分区数据集中各个数据存储桶中的数据索引关系分开存储,所述将待移动数据存储桶中的数据移动至对应的目标分区数据集,包括:
根据待移动数据存储桶对应的原分区数据集的主索引,在所述待移动数据存储桶对应的原分区数据集中扫描所述待移动数据存储桶中的磁盘组件,获得待移动数据存储桶中的存储数据;
复制目标分区数据集中各个数据存储桶中新写入的日志记录,获得待移动数据存储桶中的写入数据;
在目标分区数据集中创建新数据存储桶,将原分区数据集中的存储数据加载到新数据存储桶对应的磁盘组件中,将待移动数据存储桶中的写入数据存储到新数据存储桶对应的内存组件中,并更新目标分区数据集的主索引。
在具体的实施过程中,本说明书实施例中每个数据存储桶中可以包括内存组件和磁盘组件,内存组件和磁盘组件均是用于存储数据,内存组件主要是用于临时存储和访问数据的硬件,它的读写速度非常快,但是断电后数据会丢失。磁盘(硬盘)组件用于长期存储数据,读写速度相对较慢,但断电后数据不会丢失。一般的,每个数据存储桶中可以有一个内存组件和多个磁盘组件,内存组件和磁盘组件的具体数量可以根据实际需要进行设置或调整,本说明书实施例不做具体限定。
此外,本说明书实施例中采用了日志结构合并树格式(Log-Strucured-Merge-Tree,LSM)的索引结构,如:可以将分区数据集中的数据与数据存储桶之间的数据索引关系即主索引采用LSM树格式,主索引主要是用于存储和检索数据集中所有记录的数据结构,它通常使用某种类型的索引结构来加速数据访问,本说明书实施例中的主索引存储由主键索引的完整数据记录。其中,主键索引存储的是主键与数据记录之间的映射关系。通过主键索引可以快速地找到与特定主键关联的数据记录。在这种设置中,主键索引仅存储主键,而主索引则存储由主键索引引用的完整数据记录,简而言之通过主键索引,可以快速地索引到与该主键关联的完整数据记录,这通常存储在主索引中。这种方式提供了一种高效的机制,用于执行例如COUNT样式的查询和唯一性检查,因为主键索引通常比主索引小得多,从而更容易进行快速查找和操作。此外,本说明书实施例中的主索引使用桶式LSM-tree设计将各个数据存储桶的数据与其存储的磁盘组件之间的索引关系分别存储。
其中,LSM树(LSM-tree)可以理解为一种专为写密集型工作负载而优化的持久化索引结构,本说明书实施例中LSM树结构的索引采用了一种就地更新的设计,即总是将写入缓冲到内存组件中,并将记录追加到事务日志以实现可靠性。当内存组件满时,写入会被刷新到磁盘上形成一个不可变的磁盘组件。根据预定义的合并策略,多个磁盘组件会定期合并成一个更大的组件。LSM树上的查询需要协调来自多个组件的具有相同键的数据,其中来自更新组件的数据覆盖旧组件的数据。范围查询同时搜索所有组件并使用优先队列进行协调。点查找查询仅从新到旧搜索所有组件,直到找到第一个匹配项。为加快点查找速度,可以通过在磁盘组件中存储的键集上构建布隆过滤器。
图3是本说明书一个实施例中数据平衡处理时数据移动的过程示意图,如图3所示,图3中虚线矩形框可以表示数据存储桶,虚线矩形框内的三角形表示数据存储桶中的内存组件或磁盘组件,箭头可以表示数据移动的过程,图3中的内存即为内存组件,磁盘即为磁盘组件。在数据平衡处理时,确定出待移动数据存储桶以及其对应的目标分区数据集后,可以在待移动数据存储桶对应的原分区数据集扫描此桶的主索引对应的磁盘组件,获得待移动数据存储桶中的存储数据。图3中主索引采用的是主键索引的结构,因此,扫描的是主键索引对应的磁盘组件的数据记录。此外,还可以复制待移动数据存储桶中任何传入写入的日志记录,获得待移动数据存储桶中的写入数据,写入数据一般可以为数据平衡处理期间,待移动数据存储桶中新写入的数据。扫描获得的日志记录即待移动数据存储桶中的存储数据可以用于加载新分区的磁盘组件,由复制的日志记录即待移动数据存储桶中的写入数据则插入到内存组件中。为了简化并发控制和恢复,移动的记录始终与新分区的本地用户写入分开存储。此外,对于使用桶式LSM树设计的主索引,目标分区数据集接收到的数据只需存储在一个新的桶中,也就是说,可以在目标分区数据集中创建一个新数据存储桶,将待移动数据存储桶中的存储数据加载到该新数据存储桶的磁盘组件中,将待移动数据存储桶中的写入数据存储到该新数据存储桶的内存组件中,并将目标分区数据集中的主索引进行更新,即将新添加的数据及其存储位置之间的数据索引关系添加到目标分区数据集的主索引中。
本说明书实施例中,在数据平衡处理需要进行数据移动时,原始位置的数据仍然可能会有新的写入,只复制传入的写入确保新的写入不会丢失,并且在数据迁移过程中仍然可以接收新的写入操作。将待移动数据存储桶中的存储数据和数据平衡处理期间新写入的写入数据分开进行处理,确保数据的一致性,避免数据混乱,同时这也减少了不必要的数据复制,提高了移动的效率。此外,对于桶式LSM树设计的主索引,数据是分段存储的,每个段(或桶)都有自己的时间范围或键范围,当新数据到达时,可以被直接存储在一个新的桶中,与其他数据分开,确保数据库存储系统的可靠性和数据一致性。
此外,在数据平衡处理期间,目标分区数据集中的数据存储桶也会有新的写入数据,对于目标分区数据集中的数据存储桶中的新的写入可以存储在对应数据存储桶的内存组件中,这样可以将移动的记录与目标分区数据集的本地用户写入分开存储可以简化并发控制和数据恢复。当发生故障时系统可以轻松地区分哪些数据是移动过来的,哪些数据是目标分区数据集的本地写入,这样做还有助于减少数据混乱和冲突,确保数据的一致性和完整性。
如图3所示,在本说明书一些实施例中,本地数据存储目录中包括各个节点中分区数据集对应的本地二级索引,本地二级索引采用日志结构合并树格式,并通过日志结构合并树格式将各个分区数据集中各个数据存储桶中的数据索引关系统一存储,所述将记录的待移动数据存储桶中的数据移动至对应的目标分区数据集,包括:
在目标分区数据集对应的本地二级索引对应的存储区域中创建一个新存储组件,将待移动数据存储桶中的存储数据和写入数据存储到新存储组件中,且新存储组件对查询不可见。
在具体的实施过程中,图4是本说明书一个实施例中LSM结合哈希表的数据结构示意图,如图4所示,本说明书实施例中除了主键索引,还采用的二级索引,图4中的三角形可以表示一个数据存储桶或存储结构,hash可以理解为数据存储桶的桶哈希值,depth可以理解为桶深度。桶深度主要可以用于在数据分配到数据存储桶中存储时,数据与数据存储桶的桶编号相匹配时使用的哈希位,哈希位一般可以理解为数据哈希值的低几位,如:桶深度为2,那么可以使用数据的哈希值的低2位作为与数据存储桶相匹配时使用的哈希值。二级索引主要使用辅助键和主键的组合作为它们的索引键,二级索引也采用LSM树结构,但是,二级索引使用传统的LSM-tree设计将所有数据存储桶的数据索引关系存储在一起。对于二级索引,一个重要的区别是它们不必在数据平衡期间读取,因为它们可以在其目标位置上即时重建。为了不在二级索引查询上产生太多正常运行时开销,在二级索引中将数据按其原始键顺序存储在一个LSM-tree索引中。
图4展示了一个具有主键索引和二级索引的数据集分区示例,如图4所示,将每个数据表示为键值对,二级索引建立在value字段上。数据通过哈希值被存储在不同的数据存储桶中,而每个数据存储桶可以包含一个或多个键值对。在某些情况下,两个不同的键可能哈希到同一个数据存储桶导致碰撞,为了解决这种碰撞可以在同一个桶中存储多个键值对。例如:图4中最后一个三角形中有两个键值对都哈希到了同一个桶,这种结构可以有效地解决哈希冲突,并充分利用LSM-tree的优势进行数据存储和查找。
本说明书实施例中,数据库存储系统中可以对应一个二级索引,而每个分区数据集可以对应有一个本地二级索引,本地二级索引是一种在分布式数据库系统中用于加速数据检索的索引结构,与主索引不同,它不是基于数据的主键构建的,而是基于其他字段或属性(即辅助键)构建的。“本地”意味着这种二级索引是在每个节点或分区数据集上独立创建和维护的,只针对该节点或分区数据集上存储的数据分区。这样的设计允许系统在执行查询时更加灵活和高效。例如如果一个查询涉及到非主键字段的筛选,系统可以利用本地二级索引快速找到满足条件的数据,而不需要扫描整个数据集。本地二级索引主要有以下优点:1.查询性能提升:能够快速定位到满足特定条件的数据;2.并行处理:由于每个节点有自己的本地二级索引,多个节点可以并行地执行查询。3.减少数据传输:由于索引是本地的,不需要跨节点传输大量数据。
主索引和二级索引可以分别对应有自己的存储区域,如:在一个分区数据集中可以将数据存储两份,分别存储在主索引和二级索引对应的磁盘组件里。在数据平衡需要进行数据移动时,可以将上述实施例中获得的待移动数据存储桶的存储数据和写入数据存储在目标分区数据集对应的本地二级索引的在一个新存储组件的列表中,即可以在目标分区数据集对应的本地二级索引的存储区域新创建一个存储组件,新存储组件可以包括磁盘组件和/或内存组件,这些新存储组件对查询保持不可见。此外,如果数据平衡操作失败,则可以简单地删除这些新存储组件以清除中间结果。最后为了确保正确性,扫描的数据记录必须被视为严格早于复制的日志记录,这通过在LSM磁盘组件列表中将加载的磁盘组件放置在存储复制的日志记录的磁盘组件之后来实现。
二级索引更加关注查询效率,将目标分区数据集中所有新接收的记录存储在一个新存储组件的列表中可以确保这些记录在查询时不会干扰到其他数据,因为这些新存储组件对查询保持不可见,这有助于保持查询效率,并确保在数据迁移过程中,查询不会受到新数据的影响。
基于上述实施例的记载,可以扩展基本数据移动过程,同时移动多个数据存储桶,并使用新的全局目录重新分配它们,以使扫描的记录可以发送到它们的目标分区数据集。作为一个优化,当向二级索引分区添加多个桶时,可以将记录添加到一个组件列表中,而不是为每个数据存储桶创建一个存储组件列表,这将有助于在数据平衡操作完成后减少存在的磁盘组件的数量。
主索引对应的桶式LSM-tree提供与二级索引对应的传统LSM-tree相同的接口,写操作,包括插入,删除和更新,首先使用键的哈希值检查本地数据存储目录以定位数据所属的桶,然后将该数据添加到该桶中。类似地,点查找查询仅搜索其目标数据存储桶(通过本地数据存储目录定位)以获取数据。但是主键范围扫描查询必须搜索所有数据存储桶,有两种处理此类范围扫描查询的方法。第一种方法是分别扫描每个数据存储桶,与传统LSM-tree设计相比,这将不会产生额外的开销,但返回的数据将不再按主键排序。第二种方法是使用优先队列将从所有桶返回的数据合并在一起,此方法提供与传统LSM-tree设计相同的接口,返回排序的结果,但由于额外的合并排序步骤,将产生更大的搜索开销。为了决定应使用哪种方法,本说明书实施例中引入了一项优化规则,如下所示:默认情况下使用第一种方法以避免合并排序开销。但是如果后续查询操作需要主键顺序,例如用户指定的order-by子句或前缀主键上的group-by运算符,则将使用第二种方法以避免后续排序开销。最后应注意的是,桶式LSM-tree设计不会改变二级索引查询的处理方式,仅搜索二级索引以获取主键列表,然后使用它们从(分桶的)主索引中获取记录。
本说明书实施例中实现了LSM树的就地更新,确保在集群扩展后的高效再平衡,具体而言针对集群扩展时新增节点和删除节点的情况,采用不同的就地更新策略进行优化,以达到高效的再平衡效果。
本说明书一些实施例中,在接收到数据平衡请求之前,所述方法还包括:
将待存储数据采用一致性哈希分区法划分为多个分区数据集,将各个分区数据集分配到对应的节点;
为各个分区数据集分别分配预设数量的数据存储桶,并分别设置各个分区数据集中各个数据存储桶的桶编号;
将各个分区数据集中的待存储数据对应的哈希值进行哈希计算,并将哈希计算结果按照各个分区数据集中的数据存储桶的数量进行取余计算;
将待存储数据对应的取余计算结果和所述待存储数据所在的分区数据集中的数据存储桶的桶编号进行匹配,将待存储数据分配到相匹配的数据存储桶中存储。
在具体的实施过程中,本说明书实施例中采用一致性哈希分区和动态分桶相结合的方式对系统中的数据进行存储,大多数无共享OLAP系统倾向于使用哈希分区来实现良好的负载平衡,因为数据将几乎均匀分布,并且查询通常访问大多数分区,相比之下由于范围偏差的潜在可能性,范围分区通常不适合于无共享OLAP系统,本说明书实施例中采用了哈希分区。具体的,可以先将数据库存储系统中的待存储数据采用一致性哈希分区法划分为多个分区数据集,其中,一致性哈希分区法可以理解为一种特殊的哈希分区算法,在分布式存储系统中用来缓解哈希分区增加或删除节点时引起的大规模数据移动问题。一致性哈希算法将整个哈希值组织成一个抽象的圆环,再将各个节点映射到圆环上,将需要存储的数据的关键字输入哈希函数,计算出哈希值,根据哈希值将数据映射到哈希环上,基于圆环上数据与节点之间的对应关系,确定各个节点分配到的数据集即为分区数据集。
本说明书实施例中,采用一致性哈希分区法,将待存储数据划分为多个分区数据集后,将各个分区数据集分配到对应的节点上,再为各个分区数据集分别分配预设数量的数据存储桶,并设置各个分区数据集中数据存储桶对应的桶编号。其中,每个分区数据集分配到的数据存储桶的数量可以相同也可以不同,具体根据实际需要而定,本说明书实施例不做具体限定,如:若分区数据集中的数据量比较大,则可以多分配数据存储桶。一般的,每个分区数据集中的数据存储桶的桶编号都是从0开始编号,例如:分区数据集1中有两个数据存储桶,桶编号分别为0、1,分区数据集2中有三个数据存储桶,桶编号分别为0、1、2。
为每个分区数据集分配好数据存储桶后,可以将各个分区数据集在进行一致性哈希分区时,计算出的各个待存储数据对应的哈希值再进行哈希计算,并将哈希计算结果按照分区数据集中的数据存储桶的数量进行取余计算。再将各个待存储数据对应的取余计算结果与待存储数据所在分区数据集中的数据存储桶的桶编号进行匹配,将待存储数据分配到与其取余结果相匹配的数据存储桶中进行存储。
例如:通过一致性哈希分区计算,确定将待存储数据A、B划分到分区数据集1中,在进行数据存储桶的分配时,分区数据集1中分配有两个数据存储桶,桶编号分别为0、1。将待存储数据A、B对应的哈希值进行哈希计算,再将哈希计算结果按2取余,这样待存储数据A、B对应的取余结果会是0或1,假设,待存储数据A的取余结果为0,待存储数据B的取余结果为1。将待存储数据A、B对应的取余结果与分区数据集1中的两个数据存储桶的桶编号进行匹配,待存储数据A与桶编号为0的数据存储桶相匹配,待存储数据B与桶编号为1的数据存储桶相匹配。那么,可以将待存储数据A分配到分区数据集1中桶编号为0的数据存储桶中存储,待存储数据B分配到分区数据集1中桶编号为1的数据存储桶中存储。
本说明书实施例中,将哈希分区与动态分桶相结合,将哈希键空间分成多个分桶,提供了更高效的设计机会,由于哈希密钥通常是均匀分布的,可以使用可扩展哈希方法将密钥空间划分为多个分桶。图5是本说明书一个实施例中哈希分区和动态分桶的原理示意图,如图5所示,在该场景实例中,有一个集群控制器和两个节点控制器,每个节点控制器还有两个存储分区即分区数据集,图5中的分区0、分区1、分区2、分区3即为分区数据集0-3,图5中的本地目录可以理解为为本地数据存储目录,图5中全局目录中的每一行可以理解为一个数据记录,其中的hash可以理解为在哈希分区时计算出的该数据的哈希值,深度可以理解为该数据对应的数据存储桶的桶深度,分组可以理解为该数据对应的分区数据集。图5中的本地目录可以理解为为本地数据存储目录,本地目录中每一行可以理解为一个数据存储桶,其中,hash可以理解为该数据存储桶的桶哈希值,深度可以理解为该数据存储桶的桶深度。桶哈希值可以理解为数据存储桶对应的桶编号的哈希值,桶哈希值的位数与数据存储桶的桶深度相同,如:若一个数据存储桶的桶深度为3,桶编号为1,那么该数据存储桶的桶哈希值可以为001。数据存储桶的桶深度可以表示用于确定该数据存储桶的桶哈希值的位数。为了将数据集的记录分布到这四个分区数据集,哈希键空间(即每个数据对应的哈希值)被划分为多个数据存储桶。一个数据存储桶是由取哈希函数的d个低位生成的,其中d被称为该数据存储桶的桶深度。在进行数据平衡操作时可以将仅一些受影响的桶移动到新的分区,大大减少了重新平衡成本。
此外,如图5所示,可以在节点控制器中使用一个全局目录来将数据存储桶映射到分区数据集。全局目录具有全局深度,它是所有数据存储桶中使用的位数的最大值,因此全局目录的大小为。在图5中,两个哈希值011和111的数据当前对应于相同的数据存储桶11,位于分区1中,分区1中的数据存储桶中包含三条数据记录,但是图5中未显示完全。要定位给定键/>存储的位置,只需要使用/>的哈希值的D个低位在全局目录中查找,其中D是全局目录的深度。在查询编译期间,每个查询会创建一个不变的全局目录副本,它在整个查询处理过程中使用。同样数据源(数据传输作业)也使用一个不变的全局目录副本,以将数据集的传入记录分发到正确的节点控制器分区。这样可以允许系统在不影响正在进行的查询或数据传输作业的情况下,动态地重新平衡或调整数据的分布。
本说明书实施例中,将一致性哈希分区与动态分桶相结合,可以将系统中的数据均衡的分配到各个节点中,保证系统中数据的平衡,进而确保系统的性能。
本说明书一些实施例中,所述数据存储桶中包括内存组件和磁盘组件,所述方法还包括:
在目标数据存储桶的桶负载大于预设桶负载时,采用异步线程将所述目标数据存储桶的内存组件刷新到数据存储设备上,刷新完成后,锁定所述目标数据存储桶;
将目标数据存储桶的内存组件中新写入的数据同步刷新到所述数据存储设备上;
创建两个分割数据存储桶,并设置所述分割数据存储桶的磁盘组件引用所述目标数据存储桶的磁盘组件;
解锁所述目标数据存储桶,并将所述目标数据存储桶的目录元数据文件写入所述数据存储设备上。
在具体的实施过程中,每个数据存储桶会不断的有新的数据写入,当一个数据存储桶变得太大时,可以使用一个更高的哈希位来将其分割成两个较小的桶。每个需要进行桶分割的数据存储桶可以称为目标数据存储桶,以数据存储桶B作为目标数据存储桶为例,假设数据存储桶B变得太大即桶负载大于预设桶负载时,可以对数据存储桶B进行桶分割。其中,桶分割的过程为:初始化新的组件合并,等待所有现有的合并完成。然后异步地将数据存储桶B的内存组件刷新到磁盘(该磁盘通常是指数据库存储系统所控制或管理的存储设备,这个存储设备一般是分布式存储系统中的一部分,不是数据存储桶B的磁盘,是分布式的,独立于某个数据存储桶的存储系统)上,而不会阻塞写操作。刷新完成后,数据存储桶B被锁定,以临时阻止新的读写操作,以便安全地分割数据存储桶B。由于上次异步刷新后数据存储桶B中可能有新的写入在其内存组件,因此现在同步地刷新数据存储桶B的内存组件以持久化这些新写入的数据。然后创建两个分割数据存储桶,它们的磁盘组件引用数据存储桶B的磁盘组件,即把数据存储桶B分成两个部分。强制将数据存储桶B的目录元数据文件写入磁盘即一种存储设备,以确保数据存储桶B的拆分被记录和持久化。
图6是本说明书一个实施例中数据存储桶分割的示意图,如图6所示,虚线方框可以表示一个数据存储桶,虚线方框内的内存即该数据存储桶的内存组件,虚线方框内的磁盘即该数据存储中的磁盘组件,虚线方框旁边的hash可以表示该数据存储桶对应的桶哈希值,depth表示该数据存储桶对应的桶深度。如图5所示,对于每个数据存储桶11的磁盘组件,在桶011和111中分别创建两个新的磁盘组件,并引用数据存储桶11的磁盘组件。最后,将强制数据存储桶11的目录元数据文件写入磁盘,表示分割操作已完成。
在每个分区数据集中使用本地数据存储目录来记录分区数据集本地分配的数据存储桶。为了简化桶分割,可以在数据平衡之前,更新全局目录。例如在图5中,在分区0中,桶00已经拆分成了两个桶000和100,桶深度也从原来的2变为3,但尚未更新全局目录。这不会影响全局目录的正确性,因为它仍然可以正确地将所有键路由到正确的分区。
本说明书实施例在进行数据存储桶分割时采用通过异步刷新和同步刷新的方式,将数据存储桶B的内存组件刷新到磁盘,并在分割过程中对数据存储桶B进行锁定,以确保数据的一致性和安全性。使用异步刷新和同步刷新结合的方式,是为了在桶分割过程中实现数据的一致性和安全性。首先算法使用异步刷新将数据存储桶B的内存组件缓冲的写入操作刷新到磁盘,而不会阻塞其他写操作。这样可以提高写入性能,因为写操作可以继续进行而无需等待磁盘刷新的完成。异步刷新可以减少写操作的延迟,并允许系统在后台进行磁盘刷新操作。然而由于异步刷新可能会导致一些写操作尚未持久化到磁盘,为了确保数据的一致性,算法还使用同步刷新来将数据存储桶B的内存组件同步地刷新到磁盘。同步刷新会阻塞写操作,直到所有写操作都被持久化到磁盘,以确保数据的持久性和一致性。通过异步刷新和同步刷新结合的方式,可以在保证数据一致性和安全性的同时,提高写入性能和系统的吞吐量。
本说明书实施例提出了一种动态分桶技术,将数据集分散到多个数据存储桶中,并在需要时创建新桶或删除空桶以进行数据平衡,这种方法能够确保数据均衡分布,从而提高系统的查询效率。并且,将哈希分区和动态分桶相结合,确保桶的数量可以随着数据量的增长而动态扩展,这种方法使得哈希函数具有可添加性和可删除性的特点,从而可以有效地重新分配数据。
本说明书一些实施例中,每个数据存储桶对应有一个桶深度,桶深度用于表征数据与数据存储桶的桶编号相匹配时使用的哈希位,两个分割数据存储桶的桶深度比目标数据存储桶的桶深度大预设深度,在创建出两个分割数据存储桶后,所述方法还包括:
设置两个分割数据存储桶的桶编号;
根据分割数据存储桶的桶深度,获取目标数据存储桶中的数据的哈希值中与桶深度对应的分割哈希值;
将目标数据存储桶中存储的数据的分割哈希值按2取余计算,获得目标数据存储桶中存储的数据对应的取余结果;
将目标数据存储桶中存储的数据对应的取余结果与两个分割数据存储桶的桶编号进行匹配,将目标数据存储桶中存储的数据分别分配到相匹配的分割数据存储桶中。
在具体的实施过程中,每个数据存储桶可以对应有一个桶深度即图5中的深度,桶深度主要可以用于数据与数据存储桶的桶编号相匹配时使用的哈希位,哈希位一般可以理解为数据哈希值的低几位,如:桶深度为2,那么可以使用数据的哈希值的低2位作为与数据存储桶相匹配时使用的哈希值。在将目标数据存储桶分割为两个分割数据存储桶后,可以为分割数据存储桶设置对应的桶编号,一般的桶编号是从0开始编,也就是说,两个分割数据存储桶的桶编号分别为0、1。同时,将目标数据存储桶分割为两个分割数据存储桶后,可以基于目标数据存储桶对应的桶深度,设置分割数据存储桶对应的桶深度,分割数据存储桶的桶深度比目标数据存储桶的桶深度大,一般会将目标数据存储桶的桶深度增加1作为分割数据存储桶的桶深度。
再基于分割数据存储桶的桶深度重新计算目标数据存储桶中存储的数据的哈希值,如:可以根据分割数据存储桶的桶深度选择目标数据存储桶中存储的数据的哈希值中的指定位数作为分割哈希值,其中,目标数据存储桶中存储的数据的哈希值可以是在哈希分区时计算出的。如:若在进行哈希分区时,计算出的目标数据存储桶中存储的数据A的001,分割数据存储桶的桶深度为2,则可以将数据A的哈希值的低两位的哈希值即01作为数据A的分割哈希值。获得目标数据存储桶中的数据对应的分割哈希值后,可以将各个数据的分割哈希值按2取余,获得各个数据对应的分割取余结果,再将计算出的分割取余结果与分割数据存储桶的桶编号进行匹配,从而将目标数据存储桶中的数据分配到相匹配的分割数据存储桶中。
通过动态拆分或合并数据存储桶来进一步扩展静态分桶的可用性,以适应数据集大小的增长或缩小,结合一致性哈希通过将哈希键空间组织成环形结构,让每个节点服务于一个键范围。当添加或删除节点时,基于其下一邻居节点调整其键范围。
在数据存储桶的负载过大时,可以将数据存储桶进行分割,并且,通过增加分割数据存储桶的桶深度,来将原数据存储桶中的数据重新分配到分割数据存储桶中,这样做的好处是只有一个桶(及其数据)参与了分裂操作,而不是整个哈希表。这大大减少了重新平衡的成本,因为只有这个数据存储桶中的数据需要被重新哈希和移动。
此外,为了简化与节点协调器的同步,每个分区数据集对数据存储桶进行本地分割,而无需通知节点协调器。相反仅当启动数据平衡操作时,节点协调器上的全局目录才会被刷新,这样设计大大简化了节点协调器的角色,因为它不必知道桶分割的存在。
本说明书一些实施例中,每个数据存储桶对应有一个桶哈希值,桶哈希值是数据存储桶对应的桶编号的哈希值,桶哈希值的位数与数据存储桶的桶深度相同,所述方法还包括:
接收查询请求,查询请求中包括待查询数据;
计算待查询数据对应的查询哈希值,并基于查询哈希值查询对应的查询数据存储桶;
在查询数据存储桶的磁盘组件为目标数据存储桶对应的引用磁盘组件时,则获取查询数据存储桶的磁盘组件引用的目标磁盘组件,并使用目标磁盘组件对应的数据存储桶的桶哈希值对所查询哈希值进行过滤,若过滤通过,则从目标磁盘组件中返回待查询数据。
在具体的实施过程中,参见上述实施例的记载,每个数据存储桶可以对应有一个桶哈希值,桶哈希值可以理解为数据存储桶对应的桶编号的哈希值,桶哈希值的位数与数据存储桶的桶深度相同。引用磁盘组件不直接存储数据,而是指向一个实际存储数据的磁盘组件,目标数据存储桶分割为两个分割数据存储桶后,分割数据存储桶的磁盘组件可以理解为引用磁盘组件。通过引用磁盘组件访问数据的所有查询必须执行一个基于桶哈希值的额外过滤步骤,以确保只访问真正属于这个桶的数据。因此,分割数据存储桶的新存储组件的实际创建被有效地推迟到下一轮合并。当一个查询需要访问某个数据存储桶中的数据时,它会通过这个引用磁盘组件来找到实际的数据存储位置,因为一个实际的磁盘组件可能被多个引用磁盘组件所指向(例如在桶拆分的情况下),所以仅仅通过引用磁盘组件是不够的,查询还需要进行一个额外的过滤步骤,这个过滤是基于桶的哈希值进行的。具体的,为了确保查询只访问真正属于特定桶的数据,可以使用基于桶哈希值的过滤步骤。具体的过滤流程大致如下:1.当查询请求来临,首先计算查询键的哈希值。2.使用此哈希值查找对应的桶。3.如果查找到的是一个引用磁盘组件,那么会跟随该引用到真实的磁盘组件。4.在真实磁盘组件中,使用桶哈希值过滤数据。这是为了确保从该组件中检索的数据确实属于所查询的桶,因为原始的磁盘组件可能包含多个桶的数据。5.返回满足查询条件并且通过哈希过滤的数据。这种基于桶哈希值的过滤机制确保了数据的完整性和准确性,避免了因为桶的拆分和引用机制而导致的数据混淆或错误查询。
在一些实施例中,目标数据存储桶中设置有引用计数,当目标数据存储桶被访问时,引用计数加1,所述方法还包括:
在目标数据存储桶的引用计数为0时,自动回收目标数据存储桶。
在具体的实施过程中,参见上述实施例的记载,本说明书实施例中引入了一个分桶LSM树的设计,用于高效地在主索引中存储多个桶。每个数据存储桶可以被视为一个带有内存组件和多个磁盘组件的单独的LSM树,并且,可以使用引用计数来处理并发。也就是说每当一个数据存储桶、一个内存组件或一个磁盘组件被访问时,读者或写者会增加一个引用计数,以便在访问完成之前不能销毁(回收)访问的实体。所有刷新和合并都在每个数据存储桶内执行,所有数据存储桶都使用本地数据存储目录进行协调。目标数据存储桶也设置有引用计数,当目标数据存储桶的负载过大,分割为两个分割数据存储桶后,目标数据存储桶的磁盘组件还不再直接存储数据,而是作为一个引用存在,指向分割数据存储桶,此时还不能直接删除目标数据存储桶。当目标数据存储桶的引用计数为0时,旧的目标数据存储桶将被自动回收。
引用计数是一种内存管理技术,用于记录一个对象被多少个其他对象引用。本说明书实施例中,引用计数可以用于确保即使在数据重新平衡过程中,正在进行的查询操作也能安全地继续访问原始数据,因为这些数据存储桶和LSM组件的引用计数不为零(即它们仍然被查询操作引用),所以它们不会在重新平衡过程中被修改或删除,从而确保了查询操作的安全性。
本说明书一些实施例中,所述方法还包括:
在数据库存储系统重新启动时,根据数据存储设备上的目录元数据文件确定出系统中的无效数据存储桶;无效数据存储桶为部分分割的数据存储桶;
将无效数据存储桶自动清除。
在具体的实施过程中,在进行数据存储桶的分割时,会将目标数据存储桶的目录元数据文件强制写入到数据库存储系统中的数据存储设备中,目录元数据文件可以理解为目标数据存储桶对应的数据记录的源文件。在数据库存储系统重新启动或恢复后,它会使用存储在数据存储设备上的目录元数据文件来识别哪些数据存储桶是有效的,哪些数据存储桶可能因为故障或其他原因而处于不一致的状态。所有被标记为无效的无效数据存储桶将被自动清除或修复,以确保系统恢复到一个一致的状态。其中,无效数据存储桶为分割未完成或合并未完成的数据存储桶,如:因为在系统崩溃时它们正在被分割或合并的数据存储桶。
通过目录元数据文件可以检测数据存储桶是否有效,从而将数据不一致的数据存储桶删除,确保数据库存储系统中数据的一致性和系统的稳定性,可以实现数据库存储系统在故障后自我修复。
本说明书实施例中使用了动态分桶技术、可扩展哈希技术、就地更新设计、并行数据处理等多种技术实现了高效的无共享OLAP系统的数据再平衡。具体的,本说明书实施例中提出了一种可扩展哈希方法,这是一种有效的数据重新平衡方法,结合了动态桶与可扩展散列,适用于无共享OLAP的并行数据管理系统。可扩展哈希使用可扩展散列将记录动态地分割成多个桶,以实现良好的负载均衡和小的重新平衡成本。此外,本说明书实施例实现了利用LSM-tree的原地更新设计,可以在不阻塞并发读取和写入的情况下有效地重新平衡数据。
图7是本说明书一些实施例中数据库存储系统数据再平衡的处理流程示意图,如图7所示,数据再平衡在分布式的数据库存储系统中是一个关键操作,用于确保数据在各个节点上均匀分布,以实现最佳性能和资源利用。以下是数据再平衡的流程:
1.接收数据平衡请求:系统接收到触发数据再平衡的请求,这通常是由于新节点的加入、旧节点的移除或数据分布不均等。
2.暂停或限制写操作:为了减少数据不一致的风险,系统可能会暂停或限制新的写操作。
3.计算新的数据分布:根据当前各节点的负载和数据量,计算新的数据分布方案。
4.锁定旧分区:在数据移动之前,需要锁定将要被移动的分区数据集以防止数据不一致。
5.开始数据迁移:根据新的数据分布方案,开始将数据从一个节点迁移到另一个节点。
6.日志和元数据更新:在数据迁移的同时,需要更新相关的日志和元数据。
7.解锁旧分区和新分区:数据迁移完成后,解锁相关的分区数据集。
8.验证和测试:在数据完全迁移后,进行数据一致性的验证和性能测试。
9.提交更改:如果一切正常,提交所有更改,包括元数据和数据分布方案。
10.恢复写操作:在确认数据已成功迁移并且系统稳定后,恢复所有暂停或限制的写操作。
11.日志和监测:记录再平衡操作的详细日志信息,并持续监测系统性能。
具体的,参见上述实施例的记载,本说明书实施例中采用一致性哈希和动态分桶相结合的方式进行数据的存储,系统中会包括多个数据存储桶,在考虑如何有效地存储多个数据存储桶的同时,还需要考虑如何支持并发读写的情况下高效地再平衡数据。在系统中数据再平衡是通过系统API在一些节点被添加或在一些节点被移除之前触发的。再平衡操作包含三个阶段,即:初始化、数据移动和最终化。1)在初始化阶段所有节点执行一些准备工作,以便进行后续的数据移动。2)在数据移动阶段传输数据集的一些记录,包括并发写入到它们的新分区。3)最后在最终化阶段,所有节点一致地提交或中止再平衡操作,具体取决于其结果,并进行一些清理工作。再平衡操作可能因各种原因失败,如果再平衡操作失败,则必须正确清理所产生的中间结果。
初始化阶段:当重新平衡操作开始时,集群控制器会强制执行一个开始日志记录,指示重新平衡操作已开始。集群控制器进一步通过计算新节点集合上的新全局目录来决定应将哪些数据存储桶移动到哪些分区。此外为了支持并发更新,所有节点协调器都必须执行一些准备工作。
首先,需要计算新的全局目录即更新全局目录:数据存储桶的拆分是在每个节点本地进行的,而不会通知集群控制器。因此为了计算新的全局目录,集群控制器会联系所有节点协调器以获取其最新的本地目录。此外直到重新平衡完成,此数据集在每个节点协调器上的桶拆分都将被禁用。
为了高效地计算新的全局目录,我们使用了贪心算法,为了描述这个算法,首先引入一些概念,给定深度为的全局目录和深度为/>的桶/>,我们将桶/>的标准化大小(表示为)定义为/>。给定一个分区数据集/>或一个节点/>,将/>或/>表示为/>的桶和/>的桶的标准化大小之和。给定两个分区数据集,节点/>上的/>和节点/>上的/>,如果/>等于/>,则/>比/>,更负载或者如果/>大于/>,或者/>大于/>那么/>比/>更负载。采用定义的标准化大小来评估分区数据集和数据存储桶的负载的大小,再基于各个分区数据集对应的分区负载和数据存储桶的桶负载,来对各个数据存储数据桶进行重新分配,具体的分配方式参见上述实施例的记载,此处不再赘述。基于新的分配方式,获得新的全局目录。
其次,进行准备并发写:在重新平衡操作期间,某些记录可能被并发编写器更新,这可能需要相应地应用于其旧分区数据集和新分区数据集。对于需要移动的每个数据存储桶,都必须应用这些并发写入,因为重新平衡操作可能失败。为了确保并发写入的正确性,我们使用基于重新平衡开始时间将所有写入拆分为数据存储桶的并发控制协议。对于在重新平衡操作开始前发生的所有写入,将创建一个不可变的桶快照,以便可以安全地扫描。对于在重新平衡操作开始后发生的所有写入,它们的日志记录将复制到新分区数据集,以确保如果重新平衡操作成功,则不会丢失任何写入。为了实现所需的快照扫描,利用了LSM磁盘组件的不变性。具体而言在初始化阶段期间同步刷新移动数据存储桶的存储器组件,此刷新时间被视为重新平衡开始时间,并且生成的磁盘组件成为在重新平衡操作开始之前发生的所有写入的不可变副本。为了减少由于异步刷新引起的并发写入的阻塞,可以使用上述实施例中同步刷新加异步刷新的双刷新方法。具体而言可以首先异步刷新内存组件,然后使用同步刷新来保存任何剩余的写入。在这种情况下,重新平衡开始时间成为第二个(同步)刷新的时间。
数据移动阶段:在初始化阶段之后,重新平衡操作开始将受影响的数据存储桶移动到它们的新分区数据集即目标分区数据集。这涉及将扫描记录和复制的日志记录添加到它们的目标分区数据集的主索引和二级索引中。此外查询不能受重新平衡操作的影响。
首先,进行数据移动。通过比较当前的全局目录和新的全局目录,可以轻松确定每个受影响的数据存储桶即待移动数据存储桶的目标分区数据集。进而将受影响的数据存储桶的数据移动到对应的目标分区数据集,接收到的记录将存储在一个新的组件列表中,这些组件对查询保持不可见。具体移动的过程,可以参见上述实施例的记载,此处不再赘述。
其次,处理并发查询,由于数据移动的记录与输入的用户写入分开存储,因此,目标分区数据集加载的数据存储桶在重新平衡完成之前对查询不可见。如果查询在重新平衡操作完成之前开始,则使用旧全局目录的副本来访问所有的数据存储桶。否则,查询将使用由重新平衡操作更新的新全局目录来访问所有的数据存储桶。此外,由于访问的数据存储桶和LSM组件是引用计数的,因此即使在查询进行过程中完成重新平衡操作,查询也可以安全地访问它们。
最终化阶段:在所有移动的数据存储桶的数据记录已经转移到它们的新分区数据集之后,系统准备根据结果提交或者中止重新平衡操作。需要注意的是,由于并发写入,在这个阶段可能仍然存在活动的日志复制活动。因为确保所有节点始终达成一致的决策,本说明书实施例使用如下的两阶段提交协议:
准备阶段:在所有数据记录已经移动到它们的新分区数据集之后,集群控制器初始化准备阶段,将暂时阻止重新平衡数据集上的查询和写入操作。集群控制器等待所有节点控制器完成它们的日志复制,并将存储重新平衡写入的内存组件刷新到磁盘。如果所有节点控制器都成功完成,即它们都投了赞成票,集群控制器进入下面的提交阶段,否则,重新平衡操作必须被中止,重新平衡数据集将不会发生变化。在这个最终化阶段,所有查询和写入操作将被阻塞。然而这种阻塞预计非常短,因为集群控制器只等待现有的写入操作完成,并且待复制的日志记录数量是有限制的。
提交阶段:一旦协调器进入提交阶段,它会强制将一个COMMIT日志记录写入系统的磁盘组件,指示重新平衡操作已经提交。然后,集群控制器会更新重新平衡数据集的全局目录,并通知所有计算节点安装它们接收到的分区数据集并清理移动的分区数据集。要在分区中安装接收到的分区数据集,计算节点只需将已加载的磁盘组件添加到主索引和二级索引的组件列表中即可。要从分区数据集的主索引中清除移动的分区数据集,可以简单地从分桶LSM树的本地目录中删除该分区数据集,以使新查询无法访问它。值得注意的是,由于引用计数的问题,直到最后一个读取器退出,该分区数据集的实际组件才会被删除。清理一个二级索引,可以使用一种懒惰删除的方法,将此分区数据集的哈希值和深度添加到每个LSM组件的元数据中。然后,查询执行额外的验证检查来忽略所有属于这个移动的分区数据集的无效数据。因此,二级索引组件的清理实际上被推迟到下一轮合并。所有这些操作,例如添加和删除分区数据集,都通过将元数据文件强制写入磁盘来变得持久。在所有计算节点完成这些任务后,集群控制器可以恢复针对重新平衡数据集的查询处理和数据摄取。最后协调器会生成一个DONE日志记录,表示此重新平衡操作不需要执行其他工作。
基于两阶段提交协议,重平衡操作的最终结果取决于集群控制器是否成功将COMMIT日志记录强制写入硬盘。如果COMMIT日志记录成功强制写入硬盘,那么重平衡操作将被提交。否则集群控制器将简单地中止重平衡操作并将原始数据集保留不变。
基于上述所述的数据平衡处理方法,本说明书一个或多个实施例还提供一种数据平衡处理处理的终端、服务端。所述终端、服务端可以包括使用了本说明书实施例所述方法的装置(包括分布式系统)、软件(应用)、模块、组件、服务器、终端等并结合必要的实施硬件的装置。基于同一创新构思,本说明书实施例提供的一个或多个实施例中的装置如下面的实施例所述。由于装置解决问题的实现方案与方法相似,因此本说明书实施例具体的装置的实施可以参考前述方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
由以上本说明书实施例提供的技术方案可见,本说明书本说明书实施例还提供了一种数据平衡处理装置,图8是本说明书实施例提供的一种数据平衡处理装置的结构示意图,所述装置应用于数据库存储系统,如图8所示,上述装置包括:
节点目录获取模块810,用于接收节点移除或新增节点触发的数据平衡请求,并获取所述数据库存储系统中各个节点的本地数据存储目录;所述本地数据存储目录用于表征各个节点中的数据在各个节点的分区数据集中的数据存储桶中的存储路径;
负载计算模块820,用于根据各个节点的本地数据存储目录,确定出各个节点中分区数据集的分区负载和数据存储桶的桶负载;
分区数据集选择模块830,用于从各个节点的分区数据集中选择分区负载最大的第一分区数据集和分区负载最小的第二分区数据集;
桶重新分配模块840,用于将所述第一分区数据集中桶负载最小的数据存储桶预分配到所述第二分区数据集中,分别计算数据存储桶预分配前后所述第一分区数据集和所述第二分区数据集之间的分配前负载差异和分配后负载差异,若所述分配后负载差异小于所述分配前负载差异,则将所述桶负载最小的数据存储桶转移至所述第二分区数据集对应的本地数据存储目录,将所述桶负载最小的数据存储桶作为待移动数据存储桶,将所述第二分区数据集作为所述待移动数据存储桶的目标分区数据集,并返回所述从各个节点的分区数据集中选择所述分区负载最大的第一分区数据集和所述分区负载最小的第二分区数据集的步骤,直至所述第一分区数据集和所述第二分区数据集的分配后负载差异大于或等于分配前负载差异;
数据移动模块850,用于将所述待移动数据存储桶中的数据移动至对应的目标分区数据集,以实现所述数据库存储系统中的数据平衡。
在一些实施例中,所述数据平衡请求为移除指定节点触发的,所述负载计算模块具体用于:
根据各个节点的本地数据存储目录,确定出各个节点中分区数据集的原始分区负载和数据存储桶的桶负载;
将所述指定节点中的数据存储桶分配给原始分区负载最小的分区数据集中;
更新各个节点的本地数据存储目录,并根据更新后的本地数据存储目录,获得各个节点中分区数据集的分区负载。
在一些实施例中,每个数据存储桶中包括内存组件和磁盘组件,所述本地数据存储目录中包括各个节点中每个分区数据集对应的主索引,所述主索引采用日志结构合并树格式,并通过所述日志结构合并树格式将分区数据集中各个数据存储桶中的数据与数据存储的磁盘组件之间的索引关系分开存储,所述数据移动模块具体用于:
根据所述待移动数据存储桶对应的原分区数据集的主索引,在所述待移动数据存储桶对应的原分区数据集中扫描所述待移动数据存储桶中的磁盘组件,获得所述待移动数据存储桶中的存储数据;
复制所述待移动数据存储桶数据存储桶中新写入的日志记录,获得所述待移动数据存储桶中的写入数据;
在所述目标分区数据集中创建新数据存储桶,将所述原分区数据集中的存储数据加载到所述新数据存储桶对应的磁盘组件中,将所述待移动数据存储桶中的写入数据存储到所述新数据存储桶对应的内存组件中,并更新所述目标分区数据集的主索引。
在一些实施例中,所述本地数据存储目录中包括各个节点中分区数据集对应的本地二级索引,所述本地二级索引采用日志结构合并树格式,并通过所述日志结构合并树格式将各个分区数据集中各个数据存储桶中的数据索引关系统一存储,所述数据移动模块还用于:
在所述目标分区数据集对应的本地二级索引对应的存储区域中创建一个新存储组件,将所述待移动数据存储桶中的存储数据和写入数据存储到所述新存储组件中,且所述新存储组件对查询不可见。
在一些实施例中,所述数据移动模块具体用于:
将不同节点对应的所述待移动数据存储桶分配给不同的线程,采用不同的线程将所述待移动数据存储桶移动至对应的目标分区数据集。
在一些实施例中,所述装置还包括并发写入模块,用于:
将接收到所述数据平衡请求之前各个数据存储桶中的存储数据保存在桶快照中;
将接收到所述数据平衡请求之后各个数据存储桶中的写入数据复制到对应的目标分区数据集中。
在一些实施例中,所述装置还包括数据存储模块,用于:
在接收到数据平衡请求之前,将待存储数据采用一致性哈希分区法划分为多个分区数据集,并将各个分区数据集分配到对应的节点;
为各个分区数据集分别分配预设数量的数据存储桶,并分别设置各个分区数据集中各个数据存储桶的桶编号;
将各个分区数据集中的待存储数据对应的哈希值进行哈希计算,并将哈希计算结果按照各个分区数据集中的数据存储桶的数量进行取余计算;
将所述待存储数据对应的取余计算结果和所述待存储数据所在的分区数据集中的数据存储桶的桶编号进行匹配,将所述待存储数据分配到相匹配的数据存储桶中存储。
在一些实施例中,所述数据存储模块具体用于:
在目标数据存储桶的桶负载大于预设桶负载时,采用异步线程将所述目标数据存储桶的内存组件刷新到数据存储设备上,刷新完成后,锁定所述目标数据存储桶;
将所述目标数据存储桶的内存组件中新写入的数据同步刷新到所述数据存储设备上;
创建两个分割数据存储桶,并设置所述分割数据存储桶的磁盘组件引用所述目标数据存储桶的磁盘组件;
解锁所述目标数据存储桶,并将所述目标数据存储桶的目录元数据文件写入所述数据存储设备上。
在一些实施例中,每个数据存储桶对应有一个桶深度,所述桶深度用于表征数据与数据存储桶的桶编号相匹配时使用的哈希位,两个所述分割数据存储桶的桶深度比所述目标数据存储桶的桶深度大预设深度,所述数据存储模块还用于:
在创建出两个分割数据存储桶后,设置两个所述分割数据存储桶的桶编号;
根据所述分割数据存储桶的桶深度,获取所述目标数据存储桶中的数据的哈希值中与所述桶深度对应的分割哈希值;
将所述目标数据存储桶中存储的数据的分割哈希值按2取余计算,获得所述目标数据存储桶中存储的数据对应的分割取余结果;
将所述目标数据存储桶中存储的数据对应的分割取余结果与两个所述分割数据存储桶的桶编号进行匹配,将所述目标数据存储桶中存储的数据分别分配到相匹配的分割数据存储桶中。
在一些实施例中,每个数据存储桶对应有一个桶哈希值,所述桶哈希值是数据存储桶对应的桶编号的哈希值,所述桶哈希值的位数与数据存储桶的桶深度相同,所述装置还包括数据查询模块,用于:
接收查询请求,所述查询请求中包括待查询数据;
计算所述待查询数据对应的查询哈希值,并基于所述查询哈希值查找对应的查询数据存储桶;
在所述查询数据存储桶的磁盘组件为所述分割数据存储桶对应的引用磁盘组件时,则获取所述查询数据存储桶的磁盘组件引用的目标磁盘组件,并使用所述目标磁盘组件对应的数据存储桶的桶哈希值对所述查询哈希值进行过滤,若过滤通过,则从所述目标磁盘组件中返回所述待查询数据。
在一些实施例中,所述目标数据存储桶中设置有引用计数,当所述目标数据存储桶被访问时,所述引用计数加1,所述装置还包括桶回收模块,用于:
在所述目标数据存储桶的引用计数为0时,自动回收所述目标数据存储桶。
在一些实施例中,所述装置还包括桶清除模块,用于:
在所述数据库存储系统重新启动时,根据所述数据存储设备上的目录元数据文件确定出所述数据库存储系统中的无效数据存储桶;所述无效数据存储桶为分割未完成或合并未完成的数据存储桶;
将无效数据存储桶自动清除。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。上述实施例中的装置根据方法实施例的描述还可以包括其他的实施方式,具体的实现方式可以参照相关方法实施例的描述,在此不作一一赘述。
图9是本说明书实施例提供的一种用于数据平衡处理电子设备的框图,该电子设备可以是终端,其内部结构图可以如图9所示。该电子设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该电子设备的处理器用于提供计算和控制能力。该电子设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该电子设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种数据平衡处理方法。该电子设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该电子设备的输入装置可以是显示屏上覆盖的触摸层,也可以是电子设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
图10是本说明书实施例提供的另一种用于数据平衡处理电子设备的框图,该电子设备可以是服务器,其内部结构图可以如图10所示。该电子设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该电子设备的处理器用于提供计算和控制能力。该电子设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该电子设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种数据平衡处理方法。
本领域技术人员可以理解,图9或图10中示出的结构,仅仅是与本说明书实施例方案相关的部分结构的框图,并不构成对本说明书实施例方案所应用于其上的电子设备的限定,具体的电子设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在示例性实施例中,还提供了一种电子设备,包括:处理器;用于存储该处理器可执行指令的存储器;其中,该处理器被配置为执行该指令,以实现如本说明书实施例中的数据平衡处理方法。
在示例性实施例中,还提供了一种计算机可读存储介质,当该存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行本说明书实施例中的数据平衡处理方法。
在示例性实施例中,还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各种可选实现方式中提供的数据平衡处理方法。
可以理解的是,在本说明书的具体实施方式中,涉及到用户相关的数据,当本说明书以上实施例运用到具体产品或技术中时,需要获得用户许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本说明书所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本说明书实施例的其它实施方案。本说明书旨在涵盖本说明书实施例的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本说明书实施例的一般性原理并包括本说明书实施例未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本说明书实施例的真正范围和精神由下面的权利要求指出。
应当理解的是,本说明书实施例并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本说明书实施例的范围仅由所附的权利要求来限制。
Claims (15)
1.一种数据平衡处理方法,其特征在于,所述方法应用于数据库存储系统,所述方法包括:
接收节点移除或新增节点触发的数据平衡请求,并获取所述数据库存储系统中各个节点的本地数据存储目录;所述本地数据存储目录用于表征各个节点中的数据在各个节点的分区数据集中的数据存储桶中的存储路径;
根据各个节点的本地数据存储目录,确定出各个节点中分区数据集的分区负载和数据存储桶的桶负载;
从各个节点的分区数据集中选择分区负载最大的第一分区数据集和分区负载最小的第二分区数据集;
将所述第一分区数据集中桶负载最小的数据存储桶预分配到所述第二分区数据集中,分别计算数据存储桶预分配前后所述第一分区数据集和所述第二分区数据集之间的分配前负载差异和分配后负载差异,若所述分配后负载差异小于所述分配前负载差异,则将所述桶负载最小的数据存储桶转移至所述第二分区数据集对应的本地数据存储目录,将所述桶负载最小的数据存储桶作为待移动数据存储桶,将所述第二分区数据集作为所述待移动数据存储桶的目标分区数据集,并返回所述从各个节点的分区数据集中选择所述分区负载最大的第一分区数据集和所述分区负载最小的第二分区数据集的步骤,直至所述第一分区数据集和所述第二分区数据集的分配后负载差异大于或等于分配前负载差异;
将所述待移动数据存储桶中的数据移动至对应的目标分区数据集,以实现所述数据库存储系统中的数据平衡。
2.根据权利要求1所述的方法,其特征在于,所述数据平衡请求为移除指定节点触发的,所述根据各个节点的本地数据存储目录,确定出各个节点中分区数据集的分区负载和数据存储桶的桶负载,包括:
根据各个节点的本地数据存储目录,确定出各个节点中分区数据集的原始分区负载和数据存储桶的桶负载;
将所述指定节点中的数据存储桶分配给原始分区负载最小的分区数据集中;
更新各个节点的本地数据存储目录,并根据更新后的本地数据存储目录,获得各个节点中分区数据集的分区负载。
3.根据权利要求1所述的方法,其特征在于,每个数据存储桶中包括内存组件和磁盘组件,所述本地数据存储目录中包括各个节点中每个分区数据集对应的主索引,所述主索引采用日志结构合并树格式,并通过所述日志结构合并树格式将分区数据集中各个数据存储桶中的数据索引关系分开存储,所述将所述待移动数据存储桶中的数据移动至对应的目标分区数据集,包括:
根据所述待移动数据存储桶对应的原分区数据集的主索引,在所述待移动数据存储桶对应的原分区数据集中扫描所述待移动数据存储桶中的磁盘组件,获得所述待移动数据存储桶中的存储数据;
复制所述待移动数据存储桶数据存储桶中新写入的日志记录,获得所述待移动数据存储桶中的写入数据;
在所述目标分区数据集中创建新数据存储桶,将所述原分区数据集中的存储数据加载到所述新数据存储桶对应的磁盘组件中,将所述待移动数据存储桶中的写入数据存储到所述新数据存储桶对应的内存组件中,并更新所述目标分区数据集的主索引。
4.根据权利要求3所述的方法,其特征在于,所述本地数据存储目录中包括各个节点中分区数据集对应的本地二级索引,所述本地二级索引采用日志结构合并树格式,并通过所述日志结构合并树格式将各个分区数据集中各个数据存储桶中的数据索引关系统一存储,所述将所述待移动数据存储桶中的数据移动至对应的目标分区数据集,还包括:
在所述目标分区数据集对应的本地二级索引对应的存储区域中创建一个新存储组件,将所述待移动数据存储桶中的存储数据和写入数据存储到所述新存储组件中,且所述新存储组件对查询不可见。
5.根据权利要求1所述的方法,其特征在于,所述将所述待移动数据存储桶中的数据移动至对应的目标分区数据集,包括:
将不同节点对应的所述待移动数据存储桶分配给不同的线程,采用不同的线程将所述待移动数据存储桶移动至对应的目标分区数据集。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将接收到所述数据平衡请求之前各个数据存储桶中的存储数据保存在桶快照中;
将接收到所述数据平衡请求之后各个数据存储桶中的写入数据复制到对应的目标分区数据集中。
7.根据权利要求1所述的方法,其特征在于,在接收到所述数据平衡请求之前,所述方法还包括:
将待存储数据采用一致性哈希分区法划分为多个分区数据集,并将各个分区数据集分配到对应的节点;
为各个分区数据集分别分配预设数量的数据存储桶,并分别设置各个分区数据集中各个数据存储桶的桶编号;
将各个分区数据集中的待存储数据对应的哈希值进行哈希计算,并将哈希计算结果按照各个分区数据集中的数据存储桶的数量进行取余计算;
将所述待存储数据对应的取余计算结果和所述待存储数据所在的分区数据集中的数据存储桶的桶编号进行匹配,将所述待存储数据分配到相匹配的数据存储桶中存储。
8.根据权利要求7所述的方法,其特征在于,所述数据存储桶中包括内存组件和磁盘组件,所述方法还包括:
在目标数据存储桶的桶负载大于预设桶负载时,采用异步线程将所述目标数据存储桶的内存组件刷新到数据存储设备上,刷新完成后,锁定所述目标数据存储桶;
将所述目标数据存储桶的内存组件中新写入的数据同步刷新到所述数据存储设备上;
创建两个分割数据存储桶,并设置所述分割数据存储桶的磁盘组件引用所述目标数据存储桶的磁盘组件;
解锁所述目标数据存储桶,并将所述目标数据存储桶的目录元数据文件写入所述数据存储设备上。
9.根据权利要求8所述的方法,其特征在于,每个数据存储桶对应有一个桶深度,所述桶深度用于表征数据与数据存储桶的桶编号相匹配时使用的哈希位,两个所述分割数据存储桶的桶深度比所述目标数据存储桶的桶深度大预设深度,在创建出两个分割数据存储桶后,所述方法还包括:
设置两个所述分割数据存储桶的桶编号;
根据所述分割数据存储桶的桶深度,获取所述目标数据存储桶中的数据的哈希值中与所述桶深度对应的分割哈希值;
将所述目标数据存储桶中存储的数据的分割哈希值按2取余计算,获得所述目标数据存储桶中存储的数据对应的分割取余结果;
将所述目标数据存储桶中存储的数据对应的分割取余结果与两个所述分割数据存储桶的桶编号进行匹配,将所述目标数据存储桶中存储的数据分别分配到相匹配的分割数据存储桶中。
10.根据权利要求9所述的方法,其特征在于,每个数据存储桶对应有一个桶哈希值,所述桶哈希值是数据存储桶对应的桶编号的哈希值,所述桶哈希值的位数与数据存储桶的桶深度相同,所述方法还包括:
接收查询请求,所述查询请求中包括待查询数据;
计算所述待查询数据对应的查询哈希值,并基于所述查询哈希值查找对应的查询数据存储桶;
在所述查询数据存储桶的磁盘组件为所述分割数据存储桶对应的引用磁盘组件时,则获取所述查询数据存储桶的磁盘组件引用的目标磁盘组件,并使用所述目标磁盘组件对应的数据存储桶的桶哈希值对所述查询哈希值进行过滤,若过滤通过,则从所述目标磁盘组件中返回所述待查询数据。
11.根据权利要求8所述的方法,其特征在于,所述目标数据存储桶中设置有引用计数,当所述目标数据存储桶被访问时,所述引用计数加1,所述方法还包括:
在所述目标数据存储桶的引用计数为0时,自动回收所述目标数据存储桶。
12.根据权利要求8所述的方法,其特征在于,所述方法还包括:
在所述数据库存储系统重新启动时,根据所述数据存储设备上的目录元数据文件确定出所述数据库存储系统中的无效数据存储桶;所述无效数据存储桶为分割未完成或合并未完成的数据存储桶;
将无效数据存储桶自动清除。
13.一种数据平衡处理装置,其特征在于,所述装置应用于数据库存储系统,所述装置包括:
节点目录获取模块,用于接收节点移除或新增节点触发的数据平衡请求,并获取所述数据库存储系统中各个节点的本地数据存储目录;所述本地数据存储目录用于表征各个节点中的数据在各个节点的分区数据集中的数据存储桶中的存储路径;
负载计算模块,用于根据各个节点的本地数据存储目录,确定出各个节点中分区数据集的分区负载和数据存储桶的桶负载;
分区数据集选择模块,用于从各个节点的分区数据集中选择分区负载最大的第一分区数据集和分区负载最小的第二分区数据集;
桶重新分配模块,用于将所述第一分区数据集中桶负载最小的数据存储桶预分配到所述第二分区数据集中,分别计算数据存储桶预分配前后所述第一分区数据集和所述第二分区数据集之间的分配前负载差异和分配后负载差异,若所述分配后负载差异小于所述分配前负载差异,则将所述桶负载最小的数据存储桶转移至所述第二分区数据集对应的本地数据存储目录,将所述桶负载最小的数据存储桶作为待移动数据存储桶,将所述第二分区数据集作为所述待移动数据存储桶的目标分区数据集,并返回所述从各个节点的分区数据集中选择所述分区负载最大的第一分区数据集和所述分区负载最小的第二分区数据集的步骤,直至所述第一分区数据集和所述第二分区数据集的分配后负载差异大于或等于分配前负载差异;
数据移动模块,用于将所述待移动数据存储桶中的数据移动至对应的目标分区数据集,以实现所述数据库存储系统中的数据平衡。
14.一种电子设备,其特征在于,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如权利要求1至12中任一项所述的数据平衡处理方法。
15.一种计算机可读存储介质,其特征在于,当所述存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行如权利要求1至12中任一项所述的数据平衡处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311488523.0A CN117235185B (zh) | 2023-11-09 | 2023-11-09 | 数据平衡处理方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311488523.0A CN117235185B (zh) | 2023-11-09 | 2023-11-09 | 数据平衡处理方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117235185A CN117235185A (zh) | 2023-12-15 |
CN117235185B true CN117235185B (zh) | 2024-01-16 |
Family
ID=89089625
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311488523.0A Active CN117235185B (zh) | 2023-11-09 | 2023-11-09 | 数据平衡处理方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117235185B (zh) |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10776355B1 (en) * | 2016-09-26 | 2020-09-15 | Splunk Inc. | Managing, storing, and caching query results and partial query results for combination with additional query results |
US10984044B1 (en) * | 2016-09-26 | 2021-04-20 | Splunk Inc. | Identifying buckets for query execution using a catalog of buckets stored in a remote shared storage system |
CN113515364A (zh) * | 2021-09-14 | 2021-10-19 | 腾讯科技(深圳)有限公司 | 一种数据迁移的方法及装置、计算机设备和存储介质 |
CN113568906A (zh) * | 2021-07-02 | 2021-10-29 | 浙江工业大学 | 面向高通量数据流的分布式索引结构及负载均衡方法 |
CN115481295A (zh) * | 2022-09-15 | 2022-12-16 | 中国平安财产保险股份有限公司 | 基于分布式系统的数据存储方法、装置、设备及存储介质 |
CN115563109A (zh) * | 2022-09-26 | 2023-01-03 | 建信金融科技有限责任公司 | 一种LSM-tree存储的L0层数据处理方法及装置 |
CN116204130A (zh) * | 2023-02-23 | 2023-06-02 | 贝格迈思(深圳)技术有限公司 | 一种键值存储系统和键值存储系统的管理方法 |
-
2023
- 2023-11-09 CN CN202311488523.0A patent/CN117235185B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10776355B1 (en) * | 2016-09-26 | 2020-09-15 | Splunk Inc. | Managing, storing, and caching query results and partial query results for combination with additional query results |
US10984044B1 (en) * | 2016-09-26 | 2021-04-20 | Splunk Inc. | Identifying buckets for query execution using a catalog of buckets stored in a remote shared storage system |
CN113568906A (zh) * | 2021-07-02 | 2021-10-29 | 浙江工业大学 | 面向高通量数据流的分布式索引结构及负载均衡方法 |
CN113515364A (zh) * | 2021-09-14 | 2021-10-19 | 腾讯科技(深圳)有限公司 | 一种数据迁移的方法及装置、计算机设备和存储介质 |
CN115481295A (zh) * | 2022-09-15 | 2022-12-16 | 中国平安财产保险股份有限公司 | 基于分布式系统的数据存储方法、装置、设备及存储介质 |
CN115563109A (zh) * | 2022-09-26 | 2023-01-03 | 建信金融科技有限责任公司 | 一种LSM-tree存储的L0层数据处理方法及装置 |
CN116204130A (zh) * | 2023-02-23 | 2023-06-02 | 贝格迈思(深圳)技术有限公司 | 一种键值存储系统和键值存储系统的管理方法 |
Non-Patent Citations (1)
Title |
---|
一种自适应文件系统元数据服务负载均衡策略;佘楚玉;温武少;肖扬;刘育擘;贾殷;;软件学报(08);第30-45页 * |
Also Published As
Publication number | Publication date |
---|---|
CN117235185A (zh) | 2023-12-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9684682B2 (en) | Sharding of in-memory objects across NUMA nodes | |
US9767131B2 (en) | Hierarchical tablespace space management | |
US9430390B2 (en) | Core in-memory space and object management architecture in a traditional RDBMS supporting DW and OLTP applications | |
US20210042286A1 (en) | Transactional key-value store | |
US9672235B2 (en) | Method and system for dynamically partitioning very large database indices on write-once tables | |
US11023453B2 (en) | Hash index | |
US5625815A (en) | Relational database system and method with high data availability during table data restructuring | |
US9155320B2 (en) | Prefix-based leaf node storage for database system | |
US20180011892A1 (en) | Foster twin data structure | |
US11100083B2 (en) | Read only bufferpool | |
US11755427B2 (en) | Fast recovery and replication of key-value stores | |
US12007971B2 (en) | Pageable hash index for document store | |
CN111522502B (zh) | 数据去重方法、装置、电子设备及计算机可读存储介质 | |
US12013814B2 (en) | Managing snapshotting of a dataset using an ordered set of B+ trees | |
CN111917834A (zh) | 一种数据同步方法、装置、存储介质及计算机设备 | |
WO2022206398A1 (en) | Method and apparatus for reading data maintained in tree data structures | |
US10558636B2 (en) | Index page with latch-free access | |
CN117235185B (zh) | 数据平衡处理方法、装置及电子设备 | |
US20220365905A1 (en) | Metadata processing method and apparatus, and a computer-readable storage medium | |
CN108984343B (zh) | 一种基于内容分析的虚拟机备份及存储管理方法 | |
US20230068358A1 (en) | Using self-maintaining structure information for faster data access | |
CN117851359A (zh) | 基于数据库集群的数据处理方法、装置和计算机设备 | |
CN113590545A (zh) | 一种多核可扩展的文件系统构建方法及装置 | |
CN116975053A (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 |