用于动态划分的计算机实现方法

文档序号:9687536阅读:430来源:国知局
用于动态划分的计算机实现方法
【技术领域】
[0001]本发明主要涉及一种用于动态划分包括由包含在全局排序范围内的键可识别的数据的数据库的计算机实现方法。
【背景技术】
[0002]数据库分片是数据库的水平分区。每个此个别分区被称为分片或数据库分片。水平分区是一种数据库设计原理,由此将多行数据库的不同子集保持在单独的水平分区中。因而,每个此水平分区形成一个分片。当数据库被水平地分区为多个分片时,这在可扩展性方面提供潜在优点,因为可能将分片布置在例如为数据库服务器的不同分片存储上,因而允许数据库的扩大超过单个数据库服务器的性能和存储容量限制。
[0003]可使用各种对数据库分片的方法以满足此扩展,并且已经出现了分区数据库架构,其横跨不同分片存储自动分片并且使负荷均衡,从而使分片更容易。这些架构通常使用基于键的哈希分区或范围分区,以将数据分配给存储该数据库的分布计算系统的分片存储。例如在US2014/0108421中描述了基于键的哈希分区的示例,其中计算键的模或者更复杂的哈希,并且向每个分片存储分配特定范围的这些已计算哈希,其中预期分布将是均衡的。采用此方法的第一问题在于,在大规模数据库系统中,根据键的这些哈希的计算的需要相当大的计算功率和时间,因此导致在处理对这些键的数据的请求时延迟增大。另外,即使当使用复杂的哈希机制时,也难以确保在不同的数据存储之间均衡分布,特别是对于不能够提前可靠地评价其键和其相关联的数据的大规模分布数据库。
[0004]又进一步问题在于,例如US2014/0108421中所述的,高百分比的分布操作的此分布数据库系统的降低的性能。在这些分布操作期间,必须访问多个分片存储,以便执行需要多个键的数据,诸如单个客户的一系列订单记录,的请求。为了降低分布操作的比重,并且提高单个分片读和写操作的比重,US2014/0108421提出使用分片控制记录,其使单调键范围与通过辅助哈希方法在其上分布多个记录或多行的多个分片存储相关联。虽然这导致在处理与如图3中所示的特定顾客ID相关联的数据时单个分片的读和写操作的比重增大,并且虽然分片控制记录提供与键范围相关联的分片列,而不需要将此元数据存储在个别键级别上,但是对于需要对其检索数据的每个键列,仍需要计算辅助哈希,以便确定将访问分片列的哪个分片存储。另外,使用单调键,例如顾客ID,导致标准应用水平情况下的不良性能,其中例如需要为了由用户检索和/或选择而产生顾客的排序列。应明白,在此标准情况中,诸如例如当向用户提出用户界面以通过用户的按字母顺序分类列而分页时,因为按字母顺序存储的列中的相邻顾客的单调顾客id不是必然存在于相同顾客id范围内,并且即使它们将处于相同范围内,也不确保它们将被存储在该分片列中的相同分片存储上,所以这将导致该分片控制记录的大量访问请求。另外,US2014/0108421的方法要求在可由系统的所有分片存储可访问的中心位置处的始终最新的分片控制记录,这产生了单一故障点,并且对此系统的可扩展性和响应性产生限制,尤其是在其中涉及大量分片存储的大规模分布数据库系统中。
[0005]从W02013/147785已知划分数据库的进一步方法,其中通过与用于在存储节点之间分布目标的相同基于哈希的划分方法划分用于复制的目标存储系统的索引,然后在系统中的所有存储节点之间分布这些索引分片。同样地,这里需要同步保持在不同存储节点上存储的所有索引分片,这导致延迟更长并且对此系统的可扩展性产生限制。另外,该索引产生基于哈希的分片,这导致高比率的分布操作,其中当执行标准操作,诸如例如列举存储在所选容器,诸如例如文件夹、组、标签等等中的数据目标的按字母顺序分类列时,需要访问多个不同的分片存储。随着其在对分片索引做出的请求以及涉及数据目标自身的要求两者的水平上显现,此效果被进一步恶化。
[0006]从US2012/0271795已知划分数据库的又进一步方法,其中协同服务管理涉及总键范围的键的对每个可响应为总键范围一部分的局部键子范围的多个节点的请求的分布。根据数据库表中的节点的数目以及行或键数目选择每个节点的局部键子范围。此系统要求节点上的所有键子范围彼此同步并且与协同服务同步,这对可扩展性产生限制。另外,如果不可获得关于用于总键范围的数据库中的键分布的知识,就存在下列高风险,即所选局部键子范围将导致在节点之间的数据的不均衡分布。
[0007]从US2012/0254175已知划分数据库的又进一步方法,其中该数据库包含由全局排序范围内所包含的键可识别的数据。提供也称为块的多个分片,每个分片被配置成处理对局部子范围内的至少一个键的数据的请求,此局部子范围包含所述全局排序范围的排序子范围,例如,通过键的最小值和键的最大值之间的范围定义该全局排序范围。将请求发送至正确分片的路由进程访问来自配置服务器所存储的信息以及关于每个分片的信息,诸如最小和最大键值,以及在其上存储该分片的分片存储。应明白,该配置服务器的此信息必须始终与每个分片存储上的实际情况同步,这导致延迟增大,并且对可扩展性产生限制。为了提高再均衡该系统时的灵活性,每个分片的最大大小被限于例如200MB,并且当分片达到其最大大小时,其就分为每个包括分开分片的局部子范围的分片的两个新分片。以此方式,可在系统的每个分片存储上获得大量的小分片,并且能够通过简单地将这些小分片从它们的分片存储移动至另一负载较小的分片存储而执行再均衡。然而,因为必须在能够执行请求之前,由配置服务器以最新配置信息更新路由器,这要求配置服务器持续地与这些频繁更新同步,这些频繁更新是由大量分片、频繁产生的新分片以及分片在分片存储之间的频繁再定位产生的,这对系统的可扩展性产生限制,并且提高了延迟。另外,分片的尺寸越小,涉及键的排序子集,诸如例如容器中的数据目标、文件夹中的文件、表格中的顾客等等的按字母顺序排序列导致的标准要求将导致需要访问分布在多个分片存储上的多个分片的机会越高,因此减少了单个分片操作的比重,并且导致相应的性能降低。
[0008]在W02012/068184中还公开了一种可动态扩展的冗余分布存储系统。其公开了一种使用副本,例如RAID,或者使用纠错码或者ECC,诸如例如纠删码,以实现特定冗余水平的存储系统。该存储系统包括文件管理器控制器和存储管理器控制器,将文件标识符和数据块与存储该文件和数据块的存储装置相关联。能够使用分布哈希表实现此文件管理控制器,分布哈希表例如作为哈希表列实现,其包含与该文件管理器负责的独特文件标识符值的范围相关联,例如该公开的图2C中所示。如图所示,每个文件管理器必须了解其自身的键值的局部子范围,其为圆形总键范围的一定比重。另外,其也必须了解至少关于管理在其自身局部子范围之前的局部子范围的文件管理器,以及管理在其自身局部子范围之后的子范围的文件管理器的信息。认为由于分布哈希表的分布特性,所以当使用时,节点可用的此哈希表列可能不完全精确,这是因为配置此列需要时间,在此期间可能发生节点故障或者分布哈希表再均衡。该系统依赖于下列假定,即使信息过时,此过时信息也将在任何情况下通往具有更靠近期望节点的范围的节点,因此最终导致通过一个或更多中间跳而访问期望节点。然而,在大规模分布数据库系统中,此假定不是始终成立,并且例如当相邻节点的信息和/或它们的相应局部子范围将过时的时候,会导致不可逆数据或不可接受的延迟。不难想象下列情况,其中请求将在仍将彼此视为相邻节点的两个过时节点之前前后跳动。另外,基于哈希的分片需要对每个键,例如文件标识符,产生适当的哈希,如上文解释的,这将导致在执行标准请求时,诸如产生容器中的数据目标、文件夹中的文件、表中的顾客等等的按字母顺序排序列时单个分片操作的比重降低。此性能退化在W02012/068184的系统中甚至更严重,因为为了允许特定水平的再均衡灵活性,该系统使用两个分布哈希表系统,一个用于负责管理文件元数据的文件管理器,一个用于负责管理存储装置的存储管理器。
[0009]因而,仍存在一种用于数据库的动态划分的改进的计算机实现方法的需求,其克服上述现有技术的缺点,并且以鲁棒而且简单的方式确保可扩展性,当处理涉及键的排序子集的数据导致的标准请求时保证更高性能。

【发明内容】

[0010]根据本发明的第一方面,提供一种用于动态划分数据库的计算机实现方法,所述数据库包括由包含在全局排序范围内的键可识别的数据,其中所述方法包括下列步骤:
[0011]-提供多个分片存储,其每个包括分片存储标识符并且每个受限于存储容量限制;
[0012]-提供多个分片,其每个被配置成处理对于局部子范围内的至少一个键的数据的请求,该局部子范围包括所述全局排序范围的排序子范围;
[0013]-在该分片存储上提供分片,以便单个分片不延伸超过单个分片存储;
[0014]-在每个分片存储上提供局部子范围集合,每个局部子范围集合包括存储在其相应的分片存储上的分片的一个或更多局部子范围;
[0015]-当处理对于至少一个键的数据的所述请求时:
[0016]-向预定分片存储提供该请求;
[0017]-该预定分片存储通过其局部子范围集合校验该至少一个键是否存在于存储在该预定分片存储上的分片的局部子范围内;以及
[0018]-当至少一个键不存在于存储在该预定分片存储上的分片的局部子范围内时,返回包括该预定分片存储的局部子范围集合的消息。
[0019]以此方式,即使在大规模数据库的背景下,因为每个分片存储仅需要了解其自身的局部子范围集合,也能够保证鲁棒操作。这避免了在需要在所有分片存储之间和/或具有中心管理应用程序的系统宽水平上同步此信息的系统中存在的任何延迟。通过答复包括不存在于一个其局部子范围内的键的请求而返回包含该局部子范围集合的消息,该分片存储仅在与请求方相关的时间,向该请求方动态地提供关于其存储的子范围的数据的最新反馈。另外,使用在排序键子范围内存储键的分片降低了通过该分片存储检查是否能够处理请求的一个或更多键的复杂性,因为其仅需要检查键是否存在于其局部子范围集合的其局部子范围内。因为这些局部子范围为排序子范围,所以能够通过简单地检查键是否位于子范围的边界之间,例如其是否大于此排序子范围的最小限制并且小于最大限制,而执行此检查。为了执行此检查,不需要执行键的哈希或者任何其它转换。
[0020]通过使用被配置成处理对于全局排序范围的排序子范围的请求的分片,可能以有效方式处理对于涉及排序子集的数据的请求。应明白,需要考虑以产生此排序键子集的分片的数目在最理想的情况下将被最小化为包括此键子集的单个分片,但是在任何情况下最多被最小化为涉及跨越此排序键子集的子范围的分片。这意味着,例如在分布目标存储系统的背景下,其中通过独特目标标识符提供排序键,例如其以之前有更高水平等级组的一个或更多名称的目标的名称形成。以此方式,当对数据的此标准请求需要经过以按字母顺序分类列形式的数据目标而分页时,此请求能够通过如下来处理:访问其键子范围包括将显示的第一键的分片,并且继续检索该分片的按字母顺序排序子集例如包括来自该分片的预定后续键数的数据。
[0021 ]根据进一步实施例,当该预定分片存储返回所述消息时,该请求随后被提供给另外的分片存储。
[0022]以此方式,实现了一种用于动态划分数据库的鲁棒、简单并且高度可扩展方法,其不需要分片存储之间的大量同步或者采用中心管理进程。每个分片存储能够有效地处理涉及存在于存储在其上的分片中的键的请求,以有效方式通过不存在的任何键的其局部子范围集合更新请求方,以便然后能够将这部分请求联结至另外的分片存储,从而以相同的有效方式处理。以此方式,即使在其中发生分片的非常动态的分布再均衡的大规模分布系统中,被提供有此请求的每个分片存储仍将能够有效地确定,以及基于其局部子范围集合形式的最新局部信息确定其是否能够处理此请求,并且如果不能,向请求方提供其当前局部状态的最新信息。
[0023]根据进一步实施例,该方法还包括下列步骤:
[0024]-提供分片路由器,其可连接至所述多个分片存储,并且适合处理对于至少一个键的数据的请求;
[0025]-在所述分片路由器上提供适合将全局排序范围的全局子范围与分片存储标识符相关联的全局子范围集合,
当前第1页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1