一种用于在在线添加节点期间进行分区的方法。该方法包括提供具有第一和第二节点(114、116)的数据存储集群(110),以及将数据表(204)存储在数据存储集群(110)中,第一分区(222)在第一节点中存储一组行或数据元素或行,第二分区(320)在第二节点中存储一组行或数据元素。该方法包括使用划分机构(140、234),添加第三节点(118)到集群,并添加第三分区到数据表,以创建第一、第二和第三分区中数据元素的分布映射(152)。通过划分机构(140、234)使用模哈希划分作为数据元素的函数,或者通过组合哈希和列表分区(144、148),该分布映射(152)提供了在第一、第二和第三分区上的数据元素的基本均匀的分布,如此使得数据保持在原始分区上。
【技术实现步骤摘要】
【国外来华专利技术】
本专利技术通常涉及管理表和数据库中的数据存储的方法和系统,更特别地涉及提供改进的数据表分区以支持添加节点到数据存储集群的方法和系统。
技术介绍
在数据存储或信息
中,关系数据库管理系统(RDMS)为丰富的各种商业应用提供了重要支持,并且存在着对以允许数据被快速检索和可靠存储的方式有效地且高效地存储大量数据的方法和设备的不断增长的需求。在数据库中,典型地,将信息存储于存储了多条信息(例如,在一行中,一个字段可以存储个人的名字,另一个字段可以存储个人的地址等等)的数据字段的行中,其中一个或多个字段提供关键字(例如,可以包括唯一识别数据库或表中的每个数据行的主关键字)。例如,电信公司和许多其它服务提供商,例如金融机构、基于Web的零售商和服务提供商等等需要集群的、高可用性数据库。增大数据库大小的速率造成了在数据存储工业中的许多挑战,包括如何添加额外的存储设备(例如盘驱动器、磁带驱动器、光盘驱动器、服务器等等)来为存储越来越大的表格提供更多的节点,例如,为处理快速增长的存储于表的行中的数据容量可能需要节点的数据库集群的改进以处理增加的信息量。每个RDMS开发者最终都遭遇到一种情形表存储巨大量的历史数据,但用户典型地仅仅在任何特定时间检索少量的独特的部分。例如,金融机构可以追踪数以百万计的关于股票交易数年的记录,但用户可能仅仅需要检索小段时期(例如一个特定的月份)的交易数据。为改进查询性能以及在表中存储不断增长的数据量,DBMS开发者经常将一个大型表分割成具有相同结构(例如,相同的字段/列)的单独的表。代表性地,水平划分表,每个成员或分开的表具有与原始表相同数目的列/字段,而每列具有和原始表中相应列一样的属性(例如数据类型、大小等等)。对DBMS开发者而言,当前的挑战是如何以提供更好的硬件使用以及允许快速数据再现和/或数据重组的方式划分数据的表。尤其是,提供用于决定如何划分实现无共享架构以提供数据库管理的关系数据库管理系统中的表的装置是可取的。利用无共享方法,每个处理器具有自己的存储器以及本地盘或数据存储器。除了通信网络以外,处理器间不共享其它资源。例如,MySQL的NDB集群存储引擎是分布式、内存中、无共享的存储引擎,具有向其它站点的同步复制和跨存储分布式数据(例如表中的桶或分区)的节点的自动水平数据划分。利用此存储引擎,表中数据的任何给定行都适于存储在集群节点上的任何分区中,代表性地,RDMS使用同步复制。 表定义基于划分函数指定了哪些行映射到哪些分区,并且,结果是,当加入一个节点到集群时,选择或设计划分函数以实现数据表的有效重组是重要的。对其它存储引擎产品而言,分区是重大设计问题,因为低效率的分区可以很快导致不希望的数据分布(例如,一些节点存储表的较大部分)和重组过程期间内存的低效率使用。仍然需要由存储引擎使用的表重组机构将保持在线和可用的分区添加到表。对这样的表重组机构的设计需求可以是不应阻止在线读取、更新和扫描(即,事务)。此外,可能期望完成重组而无需整个表的复制,而是代之以仅有被移到新分区(例如,在添加的节点或在现存的节点中)的行需要存在于内存中两个地方。例如,当表重组模块与添加节点操作组合使用时,这就意味着在原始的较旧节点上无需额外的内存。许多存储引擎支持划分表格的多个不同机制,包括按数据范围(例如将表划分成与年的月份一致的12个分区)、按线性哈希的使用、按模哈希等等。线性哈希仅需要在添加新桶或分区时分割桶或分区,而线性哈希引入了在数据桶或分区间的数据分布中的歪斜 (skew)。按线性哈希划分的优点是使分区的添加、放弃、合并或分割快很多,这在处理包括非常巨大数量数据的表时是有利的。但如上文所述的,缺点是,与在划分时使用模哈希的分布相比较,数据不太可能在分区间均勻分布。模哈希没有数据的歪斜,但不幸的是,当桶或分区的数目改变时,需要移动表的所有行。为理解使用线性哈希和模哈希的划分,考虑一个简单的例子是有用的。考虑以下数据(’ id’,’ name’),其中主关键字为’ id’,其可构成具有两个字段或列的表的行 (l,”Tomas”)、0,”Kent”)、(3,”Jonas”)、G,”Frazer”)、(5,”John”)、(6,”Eliza,,)、 (7,””)、(8,””)、(9,””)、(10,””)、(11,””)和(12,””)。当存储引擎(例如在 MySQL 集群中使用ndb存储引擎)存储此数据集时,可以将数据分到不同的节点。例如,存储引擎可以使用模哈希分布将数据存储在两个节点上的两个桶中,数据可以看起来象节点 1-(1," Tomas" )> (3,” Jonas”)、(5,” John”)、(7,””)、(9,””)和(11,””),节点 2-(2, "Kent"), (4,” Frazer,,)、(6,” Eliza”)、(8,””)、(10,””)和(12,””)。对于三个节点的配置来说,数据可以如下分布节点l-(l,”T0maS,,)、(4,”Frazer,,)、(7,””)和 (10,””),节点 2- ,” Kent”)、(5,” John”)、(8,””)和(11,””),节点 3-(3,” Jonas”)、 (6,”Eliza”)、(9,””)和(12,””)。这个例子已经简单化了,而实际上,模哈希包括获得主关键字的哈希的模(而不是像此处出现的那样是主关键字自身的模)。可以看出在两种情况下数据被平均分布,在第一个例子中每个分区具有6行,而在第二个例子中每个分区具有4行。然而,数据驻留在三个节点与驻留在两个节点相比区别很大,在2种情况下只有四个数据条目在相同节点上(即,在每个划分实现中,(1,“Tomas")、(2,”Kent”)、(7,””)和 (8,””)在相同节点上)。需要均勻分布,然而当添加节点或分区时重排数据或所有行可能使节点的在线添加或被划分的表的重组变得痛苦。例如,如果IG的数据存储于被划分的表中,那么使用模哈希添加一个节点可能需要移动IG的数据。或者,存储引擎可以使用线性哈希划分以在两个节点上的两个桶中存储此相同的数据,而数据可以看起来象节点 l-(l,”TomaS”)、(3,”Jonas”)、(5,”John”)、(7,””)、 (9,””)和(11,””),节点 2-(2, ”Kent”)、(4,"Frazer")、(6,”Eliza”)、(8,””)、(10,””)和 (12,””)。对三个节点而言,分区或桶可以是节点1-(1, "Tomas“)、(5,”John”)和(9,””), 节点 2- ,” Kent”)、(6,”Eliza”)、和(10,””),节点 3-(3,” Jonas”)、(4,” Frazer,,)、 (7,””)、(8,””)、(11,””)和(12,””)。在线性哈希的另一种实现中,原始节点之一可以具有与之前或原始具有的条目相同的条目,而其它原始节点可以具有其原始条目的一半, 而另一半在新节点上。3个节点划分的例子示出了所希望的性质同2节点配置相比,节点 1和2没有任何新数据。然而显而易见的是,当有3个节点时,数据的分布非常不均勻和歪斜。这是显然的,节点3具有两倍于节点1和节点2的数据条目或行。由于包本文档来自技高网...
【技术保护点】
【技术特征摘要】
【国外来华专利技术】...
【专利技术属性】
技术研发人员:J·奥尔兰德,F·克莱门特,T·乌林,
申请(专利权)人:甲骨文国际公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。