数据库系统、程序以及数据处理方法

文档序号:6532551阅读:231来源:国知局
数据库系统、程序以及数据处理方法
【专利摘要】本发明提供数据库系统、程序以及数据处理方法。实施方式的数据库系统具备存储数据库的多个节点、和管理多个节点的管理装置。管理装置具有第一分配部和第二分配部。第一分配部根据多个节点各自的状况的变更,来分配存储数据集合并接收对数据集合的访问请求的第一节点以及存储数据集合并作为第一节点的备份的第二节点,对多个节点的每一个指示与分配对应的动作。第二分配部根据多个节点的状况、第一节点以及第二节点的分配状况的变更,来分配作为第一节点或者第二节点的候补的第三节点,针对多个节点的每一个指示用于使第三节点作为第一节点或者第二节点进行动作的准备。
【专利说明】数据库系统、程序以及数据处理方法

【技术领域】
[0001]本发明的实施方式涉及数据库系统、程序以及数据处理方法。

【背景技术】
[0002](无分享型数据库)
[0003]以往,公知有一种无分享型数据库系统。无分享型数据库系统具备相互通过网络连接的多个数据库节点。
[0004]多个数据库节点分别是独立地具有处理器、存储器(memory)以及贮存器(storage)等资源的计算机。对无分享型数据库系统而言,由于资源按每个数据库节点被完全分离,所以在数据库节点间不会产生访问冲突。因此,无分享型数据库系统能够通过增加数据库节点来使性能线形提高。即,无分享型数据库系统是能够高效地实现追加数据库节点的横向扩展(scale out)的系统。
[0005](分割法(Partit1ning))
[0006]在无分享型数据库系统,可以应用被称为分割法的技术。分割法是将数据库分割成多个,并将分割后的各个数据集合(被称为分区(Partit1n))分散到多个数据库节点而使其存储的技术。由于应用了分割法的无分享型数据库系统能够减小使各个数据库节点存储的数据集合,所以能够将来自客户端的访问分散到多个数据库节点。
[0007](分片(sharding))
[0008]作为数据库技术之一,有一种被称为分片的技术。分片是将数据分割成更小的数据,自动地分散保存到多个数据库节点的技术。分片是与无分享型数据库系统的分割法类似的技术。
[0009](分布键值(Key-Value)型数据库)
[0010]另外,公知有一种键值型数据库。键值型数据库是基于与编程言语的联想排列或者Map同样地由键和值的对构成的单纯的数据模型的数据库。另外,还公知有一种通过基于键对键值型数据库进行分片来分散化的分布键值型数据库。
[0011]对键值型数据库而言,由于数据模型单纯,所以分片以及分割法的处理容易。另夕卜,分布键值型数据库能够使用多个键值型数据库节点,处理由单一的键值型数据库节点无法应对那样的大规模数据集合。因此,通过将分布键值型数据库应用于具有多个数据库节点的无分享型数据库系统,可实现能够横向扩展的大规模的数据库系统。
[0012]并且,这样的应用了分布键值型数据库的无分享型数据库系统(以下称为横向扩展型数据库系统)通过将数据均衡地配置于多个数据库节点,可使来自客户端的访问分散而整体提高吞吐量(Throughput)以及响应。
[0013]现有技术文献
[0014]专利文献
[0015]专利文献1:日本特开2009 - 157785号公报
[0016]专利文献2:日本特开2005 - 196602号公报
[0017]非专利文献
[0018]非专利文献1:“MongoDB Manual Contents”、[Online]、lOgen、[平成 25 年 I 月18 日検索]、^、y 夕一才、'7 卜 <URL:http://docs.mongodb.0rg/manual/contents/>


【发明内容】

[0019]发明要解决的问题
[0020]在横向扩展型数据库系统中,可应用将数据的复制品(replica:副本)存储到其他数据库节点的被称为复制(Replicat1n)的技术。横向扩展型数据库系统通过进行复制,即使在某个数据库节点发生了故障,也能够使用存储了副本的数据库节点来继续服务。将对数据的副本进行存储的数据库节点的个数称为冗余度。在横向扩展型数据库系统中,例如设定2个或者3个作为冗余度。
[0021]这里,对横向扩展型数据库系统而言,如果数据库节点发生故障而将发生了故障的数据库节点割离,则冗余度比预先设定的值降低。横向扩展型数据库系统如果在冗余度降低的状态下长时间继续运转,则在发生了进一步的数据库节点的故障时产生系统整体的动作停止或者大范围的数据损失的可能性变高。因此,在横向扩展型数据库系统中,需要在数据库节点发生了故障之后追加新的数据库节点,并使追加的数据库节点存储副本而恢复冗余度的结构。
[0022]另外,在横向扩展型数据库系统中,所存储的数据量有时因数据的配置而在数据库节点间不均衡。另外,在横向扩展型数据库系统中,来自客户端的访问量有时因数据的配置而在数据库节点间不均衡。
[0023]如果这样的数据配置的不均衡变大,则在横向扩展型数据库系统中,在数据量多的数据库节点或者来自客户端的访问在数据库节点中的处理时间相对变长。由于横向扩展型数据库系统的优点之一在于使来自客户端的访问分散,所以会因为这样的数据配置的不均衡而丧失优点。
[0024]为了解决以上那样的冗余度的降低以及数据配置的不均衡,横向扩展型数据库系统必须在数据配置产生了不均衡的时刻进行数据向多个数据库节点的重新配置处理。
[0025]然而,在以往的数据库系统中,必须在停止服务的状态下实施这样的重新配置处理。另外,在以往的数据库系统中,由于数据的重新配置处理的负荷非常高,所以如果不执行高效的处理则会使处理效率显著恶化。
[0026]用于解决问题的手段
[0027]实施方式涉及的数据库系统具备存储数据库的多个节点、和管理多个节点的管理装置。管理装置具有第一分配部和第二分配部。第一分配部根据多个节点各自的状况的变更,来分配存储数据集合并受理对数据集合的访问请求的第一节点、以及存储数据集合并成为第一节点的备份的第二节点,对多个节点分别指示与分配对应的动作。第二分配部根据多个节点的状况并根据第一节点以及第二节点的分配状况的变更,来分配作为第一节点或者第二节点的候补的第三节点,针对多个节点分别指示用于使第三节点作为第一节点或者第二节点动作的准备。多个节点分别具有将第一节点或者第二节点的数据集合向第三节点发送的转送部。

【专利附图】

【附图说明】
[0028]图1是表示实施方式涉及的数据库系统的硬件构成的图。
[0029]图2是表示实施方式涉及的数据库系统的功能构成的图。
[0030]图3是表示数据保持表的一个例子的图。
[0031]图4是表示当前任务表的一个例子的图。
[0032]图5是表示下次任务表的一个例子的图。
[0033]图6是表不目标任务表的一个例子的图。
[0034]图7是表示数据贮存(data store)部中存储的数据集合的一个例子的图。
[0035]图8是用于对复制处理进行说明的图。
[0036]图9是用于对短期同步处理进行说明的图。
[0037]图10是用于对长期同步处理进行说明的图。
[0038]图11是表示对节点分配的任务的转变的图。
[0039]图12是表示管理装置的集群(cluster)管理部的处理流程的图。
[0040]图13是表示由管理装置的第一分配部进行的下次任务表的计算处理的流程的图。
[0041]图14是表示由管理装置的第二分配部进行的目标任务表的计算处理的流程的图。
[0042]图15是表示节点的访问处理部的处理流程的图。
[0043]图16是表示节点的节点管理部的处理流程的图。
[0044]图17是表示节点的转送部的处理流程的图。
[0045]图18是表示针对3个分区# I?# 3的每一个分配了成为属主(owner)以及备份的节点的情况下的、节点30 — A至节点30 — C各自的状态的图。
[0046]图19是表示从图18的状态开始根据节点30 — C发生了故障而执行了短期同步处理之后的、节点30 — A至节点30 — C各自的状态的图。
[0047]图20是表示从图19的状态开始执行的长期同步处理的一个例子的图。
[0048]图21是表示对应于图20的长期同步处理结束而执行了短期同步处理之后的、节点30 — A至节点30 — C各自的状态的图。
[0049]图22是表示从图21的状态开始追加了节点30 — D的情况下的、节点30 — A至节点30 — D各自的状态的图。
[0050]图23是表示从图22的状态开始执行的长期同步处理的一个例子的图。
[0051]图24是表示对应于图23的长期同步处理结束而执行了短期同步处理之后的、节点30 — A至节点30 — D各自的状态的图。

【具体实施方式】
[0052]图1是表示实施方式涉及的数据库系统10的硬件构成的图。数据库系统10经由网络从作为外部的计算机的客户端接收针对数据库的访问请求(例如参照、更新或者登记),执行与接收到的访问请求对应的处理。
[0053]数据库系统10具备管理装置20和多个节点30。管理装置20以及多个节点30经由网络相互连接。此外,在图1中表示了两个节点30,但数据库系统10也可以具备三个以上节点30。
[0054]作为一个例子,数据库系统10是将分布键值型数据库应用于无分享型数据库的能够横向扩展的数据库系统。这样的数据库系统10能够向多个节点30分散数据集合,作为一个巨大的数据库,能够从作为外部的计算机的客户端进行访问。
[0055]管理装置20以及多个节点30分别是硬件相互独立的计算机。多个节点30分别独立地接收来自客户端的访问请求,能够独立地进行与访问请求对应的处理。
[0056]作为一个例子,管理装置20以及多个节点30分别具有CPU(Central ProcessingUnit) 12、存储器13、通信I / F14以及贮存器I / F15。另外,管理装置20以及多个节点30分别经由贮存器I / F15与外部存储装置16连接。此外,外部存储装置16也可设在节点30的内部。
[0057]另外,数据库系统10将数据库分割成多个分区来存储。分区的数量被预先决定。分割数据库的方法只要是预先决定的方法即可,可以是任意的方法。
[0058]多个节点30分别按多个分区的每一个分配是承担作为属主的任务、还是承担作为备份的任务、或者不承担属主以及备份中任意一个任务。
[0059]属主存储对应的分区的数据集合,接收来自客户端的向对应的分区的数据集合的访问请求并进行处理。另外,备份存储对应的分区的数据集合,对属主进行备份,以便例如在属主发生了故障时能取而代之承担属主的任务。此外,有时也不称为属主以及备份而称为主(master)以及从(slave)。
[0060]管理装置20对多个节点30进行管理。作为一个例子,管理装置20按多个分区的每一个来分配作为属主的节点30以及作为备份的节点30。
[0061]该情况下,为了无论因哪个节点30的故障都能尽量恢复数据库,管理装置20按照在预先决定的范围具有冗余度的方式分配作为备份的节点30。并且,管理装置20按照数据库所含的数据集合被分散配置到多个节点30的方式,来分配作为属主以及备份的节点30。
[0062]此外,管理装置20也可以在任意的节点30中设置。另外,作为管理装置20发挥功能的节点30也可以通过任意的算法被选择。另外,在作为管理装置20发挥功能的节点30发生了故障的情况下,其他节点30也可以作为管理装置20发挥功能。
[0063]这样的数据库系统10在多个节点30中的任意节点30发生了故障的情况下,能够将发生了故障的节点30割离。另外,数据库系统10也能够重新追加节点30来提高数据库的性能。
[0064]图2是表示实施方式涉及的数据库系统10的功能构成的图。
[0065]管理装置20具有表存储部21、第一分配部22、第二分配部23、和集群管理部24。第一分配部22、第二分配部23以及集群管理部24通过管理装置20的CPU12执行程序来实现。另外,第一分配部22、第二分配部23以及集群管理部24的一部分或者全部也可以由硬件电路实现。另外,表存储部21由管理装置20的存储器13或者外部存储装置16来实现。
[0066]表存储部21存储针对多个分区的每一个的用于决定多个节点30各自的任务的4个表。4个表的每一个可以是表形式的数据,也可以是表形式以外的数据。
[0067]具体而言,表存储部21存储数据保持表、当前任务表、下次任务表以及目标任务表。
[0068]数据保持表储存针对多个分区每一个的、多个节点30各自的时间戳(timestamp)。时间戳表示对应的节点30所存储的对应的分区的数据集合的更新履历。作为一个例子,时间戳是每当数据集合被更新便加I的值。因此,某个分区中的时间戳最大的节点30意味着是存储有该分区的最新的数据集合的节点30。
[0069]此外,在数据库的大小随时间不断增加的情况下,数据保持表也可以替代时间戳而储存对应的节点30所存储的对应的分区的数据集合的大小或者数据数等。
[0070]作为一个例子,数据保持表如图3所示,节点30由行确定,分区由列确定。该情况下,数据保持表在行与列正交的各个单元中储存由该行确定的节点30所存储的、由该列确定的分区的数据集合的时间戳。
[0071]当前任务表储存针对多个分区的每一个的、多个节点30分别被分配的在数据库中的任务。具体而言,当前任务表针多个分区的每一个储存多个节点30的每一个是被分配为属主、还是被分配为备份或者未被分配为属主也未被分配为备份。
[0072]作为一个例子,当前任务表如图4所示,由行确定节点30,由列确定分区。该情况下,当前任务表在行与列正交的位置的每一个单元中储存针对由该列确定的分区的、对由该行确定的节点30分配的任务。其中,在附图中,将被分配了作为属主的任务的记载为“OWNER”或者“0”,将被分配了作为备份的任务的记载为“BACKUP”或者“B”,将未被分配为属主也未被分配为备份的记载为“None”或“N”或者空白。
[0073]下次任务表储存针对多个分区的每一个的、多个节点30分别接下来被分配的任务。即,下次任务表针对多个分区分别储存多个节点30的每一个接下来是被分配为属主、还是被分配为备份、或者不被分配为属主也不被分配为备份。下次任务表是例如在节点30发生了故障或追加了新的节点30的情况下等,与当前任务表置换的表。
[0074]作为一个例子,下次任务表如图5所示,由行确定节点30,由列确定分区。该情况下,下次任务表在行与列正交的位置的每一个单元中储存针对由该列确定的分区的、由该行确定的节点30被分配的下一个任务。
[0075]目标任务表储存针对多个分区的每一个的、多个节点30分别被分配的作为备份的候补的任务。备份的候补是将来用于针对该分区进行该节点30承担作为属主或者备份的任务的准备的任务。此外,在本实施方式的说明中,虽然将任务的名称设为“备份的候补”,但被分配为备份的候补的节点30将来也可以成为属主。
[0076]作为一个例子,目标任务表如图6所示,由行确定节点30,由列确定分区。该情况下,目标任务表在行与列正交的位置的每一个单元中储存针对由该列确定的分区的、由该行确定的节点30被分配的作为备份的候补的任务。其中,在附图中,在被分配了作为备份的候补的任务的情况下记载“MID - BACKUP”或者“M”,在未被分配为备份的候补的情况下设为空白。
[0077]第一分配部22根据多个节点30各自的状况的变更,对多个分区的每一个分配成为属主的节点30以及成为备份的节点30。另外,例如在多个节点30中的任意节点30发生了故障的情况下,第一分配部22将发生了故障的节点30除外,再次分配作为属主以及备份的节点30。
[0078]另外,在追加了新的节点30的情况下,第一分配部22针对多个分区的每一个,再次分配包括新的节点30在内的作为属主以及备份的节点30。另外,在因数据集合向被分配为备份的候补的节点30的发送结束而新产生了能够作为属主或者备份的节点30的情况下,第一分配部22针对多个分区的每一个再次分配作为属主以及备份的节点30。
[0079]这里,第一分配部22按照至少存在属主的方式,针对多个分区的全部分配作为属主以及备份的节点30。由此,第一分配部22能够至少使数据库发挥功能。
[0080]另外,第一分配部22以至少使数据库发挥功能作为条件,按照具有预先决定的范围内的冗余度的方式,针对多个分区的每一个分配作为属主以及备份的节点30。由此,即使任意的节点30发生了故障,第一分配部22也能够提高至少可使数据库发挥功能的可能性。
[0081]另外,作为至少使数据库发挥功能且具有预先决定的范围内的冗余度的条件,第一分配部22按照属主以及备份分散于多个节点30每一个的方式,针对多个分区的每一个分配作为属主以及备份的节点30。由此,第一分配部22能够使多个节点30各自的处理的负荷均衡。
[0082]其中,在本例中,第一分配部22通过计算下次任务表,来分配作为属主以及备份的节点30。关于利用第一分配部22计算下次任务表的计算方法的一个例子,将参照图13在后面进行说明。
[0083]第二分配部23根据多个节点30的状况以及利用当前分配表分配的属主和备份的分配状况的变更,针对多个分区的每一个分配作为备份的候补的节点30。另外,例如在多个节点30中的任意节点30发生了故障的情况下,第二分配部23将发生了故障的节点30除外来再次分配作为备份的候补的节点30。另外,例如在追加了新的节点30的情况下,第二分配部23针对多个分区分别再次分配包括新的节点30在内的作为备份的候补的节点30。
[0084]这里,第二分配部23按照将来具有预先决定的范围内的冗余度的方式,针对多个分区的每一个分配作为备份的候补的节点30。由此,即使将来任意的节点30发生了故障,第二分配部23也能提高至少可使数据库发挥功能的可能性。
[0085]另外,第二分配部23按照将来属主以及备份分散分配于多个节点30的每一个的方式,针对多个分区的每一个分配作为备份的候补的节点30。由此,第二分配部23能够在将来使多个节点30各自的处理的负荷均衡。
[0086]其中,在本例中,第二分配部23通过计算目标任务表,来分配作为备份的候补的节点30。关于利用第二分配部23计算目标任务表的计算方法的一个例子,将参照图14在后面进行说明。
[0087]集群管理部24与多个节点30的每一个经由网络交换消息,来对多个节点30的每一个进行管理。例如,集群管理部24每隔一定时间便与多个节点30的每一个交换被称为心跳(heart beat)的消息。而且,集群管理部24根据有无心跳的回信来确定发生了故障的节点30。
[0088]另外,集群管理部24定期从多个节点30的每一个接收数据保持表。而且,集群管理部24将从全部的节点30接收到的数据保持表集中存储到表存储部21。另外,集群管理部24根据是否接收到数据保持表来确定发生了故障的节点30。
[0089]另外,集群管理部24在起动时使第一分配部22计算出下次任务表,通过将计算出的下次任务表分发给多个节点30的每一个来对多个节点30的每一个指示与分配对应的动作。另外,集群管理部24定期使第一分配部22计算下次任务表。而且,在计算出的下次任务表与当前任务表相比发生了变化的情况下,集群管理部24通过将计算出的下次任务表分发给多个节点30的每一个来对多个节点30的每一个指示与分配对应的动作。而且,集群管理部24在分发了下次任务表之后,将表存储部21中存储的当前任务表更新成下次任务表的内容。
[0090]例如,在任意的节点30发生了故障的情况下、追加了新的节点30的情况下,或者数据集合向被分配为候补的节点30的发送结束而产生了能够分配为备份的节点30的情况下,第一分配部22将任务表从当前任务表变化成计算出的下次任务表。因此,集群管理部24在这样的情况下将下次任务表向多个节点30的每一个分发。
[0091]另外,集群管理部24定期使第二分配部23计算目标任务表,将计算出的目标任务表向多个节点30的每一个分发。集群管理部24通过分发目标任务表,来对多个节点30的每一个指示用于使被分配为候补的节点30作为属主或者备份动作的准备。其中,集群管理部24以不同的周期计算下次任务表和目标任务表。
[0092]多个节点30的每一个具有数据贮存部31、表存储部32、访问处理部33、节点管理部34、转送部35。访问处理部33、节点管理部34以及转送部35通过节点30的CPU12执行程序来实现。另外,访问处理部33、节点管理部34以及转送部35的一部分或者全部也可以由硬件电路实现。数据贮存部31以及表存储部32由节点30的存储器13或者外部存储装置16来实现。
[0093]数据贮存部31存储将数据库分割后的多个分区中自节点被当前任务表分配为属主或者备份的分区的数据集合。例如,如图7所示,在被分割为3个的分区# I?# 3中,自节点相对于分区# I被分配为属主,相对于分区# 3被分配为备份。该情况下,数据贮存部31存储分区# I以及分区# 3的数据集合。
[0094]另外,节点30针对被目标任务表分配为备份的候补的分区,从被分配为该分区的属主的节点30接收数据集合。数据贮存部31存储自节点被目标任务表分配为备份的候补的分区的数据集合中的、从属主的节点30接收完毕的一部分或者全部。
[0095]表存储部32存储与数据保持表的自节点对应的部分。另外,表存储部32存储当前任务表、下次任务表以及目标任务表。在接收到下次任务表的情况下,当前任务表被改写成下次任务表的内容。在定期接收的目标任务表发生了变化的情况下,目标任务表被改写成变化后的内容。
[0096]访问处理部33经由网络接收来自客户端的访问请求。而且,访问处理部33针对多个分区的每一个执行与由当前任务表对自节点分配的任务对应的处理。
[0097]具体而言,访问处理部33接收针对被当前任务表分配为属主的分区的来自客户端的访问请求,执行与该访问请求对应的处理。作为一个例子,在接收到参照请求的情况下,访问处理部33读出该分区的数据集合之中对应的数据并向客户端发送。另外,作为一个例子,在接收到更新请求的情况下,访问处理部33对该分区的数据集合所对应的数据进行更新。另外,作为一个例子,在接收到登记请求的情况下,访问处理部33向该分区的数据集合登记新的数据。
[0098]此外,访问处理部33也可以接收包括一系列访问请求的事项(transact1n)。该情况下,访问处理部33通过事项处理来执行来自客户端的一系列访问请求。
[0099]另外,访问处理部33在处理了更新请求以及登记请求的情况下,与被当前任务表针对该分区分配为备份的节点30之间执行复制处理。复制处理是用于在被分配为备份的节点30中生成被分配为属主的节点30中存储的数据集合的副本(复制品)的处理。
[0100]具体如图8所示,访问处理部33在接收到针对自节点被分配为属主的分区的更新或者登记请求的情况下,将同一访问请求向被分配为备份的其他节点30发送。而且,其他节点30的访问处理部33从相对被分配为备份的分区的、被分配为属主的节点30接收更新或者登记的请求,执行与该请求对应的更新或者登记的处理。
[0101]访问处理部33通过进行这样的复制处理,能够在被分配为属主的节点30与被分配为备份的节点30之间取得数据集合的同步。
[0102]此外,在执行复制处理的情况下,被分配为属主的节点30的访问处理部33也可以发送包括一系列访问请求的事项。该情况下,被分配为备份的节点30的访问处理部33通过事项处理来执行复制处理。
[0103]另外,在处理了更新请求以及登记请求的情况下,访问处理部33对表存储部32中存储的数据保持表所对应的分区的时间戳进行更新。
[0104]节点管理部34经由网络与管理装置20的集群管理部24交换消息。对应于从集群管理部24接收到被称为心跳的消息,如果自节点没有发生故障则节点管理部34发送响应消息。另外,节点管理部34定期将表存储部32中存储的数据保持表向集群管理部24发送。
[0105]另外,节点管理部34从集群管理部24接收下次任务表,将接收到的下次任务表存储到表存储部32。而且,在接收到下次任务表的情况下,节点管理部34如图9所示,执行为了使多个节点30的每一个以由下次任务表分配的任务进行动作而将与来自客户端的访问请求对应的处理暂时中断来进行的同步处理、即短期同步处理。
[0106]具体而言,节点管理部34为了针对多个分区的每一个使多个节点30的每一个以由下次任务表表示的任务进行动作,使访问处理部33执行与复制处理同样的处理。由此,节点管理部34针对多个分区的每一个,能够取得被分配为属主的节点30与被分配为备份的节点30之间的数据集合的同步。而且,在取得了数据集合的同步之后,节点管理部34使访问处理部33将当前任务表改写为下次任务表的内容,执行针对多个分区的每一个的由下次任务表分配的新的任务所对应的处理。
[0107]而且,如果短期同步处理结束,则节点管理部34将当前任务表的内容更新成下次任务表的内容。以后,访问处理部33能够接受来自客户端的访问请求。
[0108]另外,节点管理部34从集群管理部24定期接收目标任务表,并将接收到的目标任务表存储于表存储部32。
[0109]转送部35如图10所示,执行为了使多个节点30的每一个以由目标任务表分配的任务进行动作而不将针对来自客户端的访问请求的处理中断地进行的同步处理、即长期同步处理。具体而言,转送部35不中断针对访问请求的处理地将自节点被当前任务表分配为属主的分区的数据集合向被目标任务表分配为备份的候补且未被当前任务表分配为属主也未被分配为备份的其他节点30发送。另外,转送部35不中断针对访问请求的处理地从被当前任务表分配为属主的其他节点30接收自节点被目标任务表分配为备份的候补且未被当前任务表分配为属主也未被分配为备份的分区的数据集合。
[0110]转送部35通过执行这样的长期同步处理,能够将被分配为属主的节点30中存储的数据集合的复制存储到未被分配为属主或者备份的节点30。由此,转送部35能够新生成在长期同步处理结束之后可以作为属主或者备份的节点30。
[0111]这里,在执行长期同步处理的情况下,转送部35通过不阻碍访问处理部33对事项的执行的后台(background)将被分配为属主的分区的数据集合发送给被分配为备份的候补的节点30。另外,转送部35通过后台从被分配为属主的节点30接收被分配为备份的候补的分区的数据集合。其中,作为一个例子,后台中的处理是在节点30具备多个CPU12的情况下使用不执行事项处理的一部分CPU12来执行的处理。另外,作为一个例子,后台中的处理是在CPU12进行时分处理的情况下在CPU12不执行事项处理的一部分时间段执行的处理。由此,转送部35能够不降低针对来自客户端的访问请求的响应速度等地执行长期同步处理。
[0112]另外,转送部35也可以将在当前任务表中自节点被分配为备份的分区的数据集合向被目标任务表分配为备份的候补且未被分配为属主也未被分配为备份的其他节点30发送。该情况下,转送部35以未从其他节点30发送同一数据集合为条件来进行处理。
[0113]图11是表示节点30被分配的任务的转变的图。节点30转变为对多个分区的每一个分配了“属主”、“备份”或“备份的候补”的状态、或者未被分配任何任务的“无”状态中任意一个。
[0114]节点30通过短期同步处理在“无”状态与“属主”状态之间相互转变。另外,节点30通过短期同步处理在“属主”状态与“备份”状态之间相互转变。另外,节点30通过短期同步处理从“备份”状态向“无”状态转变。
[0115]另外,节点30通过长期同步处理在“无”状态与“备份的候补”状态之间相互转变。而且,节点30通过短期同步处理从“备份的候补”状态向“备份”状态转变。
[0116]图12是表示管理装置20的集群管理部24的处理流程的图。集群管理部24执行以下的步骤Slll?步骤S142的处理。
[0117]首先,在步骤Slll中,集群管理部24检测数据保持表的接收事件、第一定周期事件或者第二定周期事件。数据保持表的接收事件在集群管理部24接收到从多个节点30的每一个发送来的数据保持表的情况下产生。第一定周期事件以及第二定周期事件分别定期产生。但是,第一定周期事件与第二定周期事件的产生间隔相互不同。
[0118]集群管理部24在检测出数据保持表的接收事件的情况下,使处理进入步骤S121。集群管理部24在检测出第一定周期事件的情况下,使处理进入步骤S131。集群管理部24在检测出第二定周期事件的情况下,使处理进入步骤S141。
[0119]在检测出数据保持表的接收事件的情况下,在步骤S121中,集群管理部24判断是否是起动之后最初的数据保持表的接收事件。
[0120]在是起动之后最初的数据保持表的接收事件的情况下(步骤S121的是),集群管理部24使处理进入步骤S122。在步骤S122中,集群管理部24将接收到的数据保持表登记到表存储部21。
[0121]接着,在步骤S123中,集群管理部24使第一分配部22计算出下次任务表。其中,关于利用第一分配部22计算下次任务表的计算处理,将参照图13来进行说明。
[0122]接着,在步骤S124中,集群管理部24将计算出的下次任务表分发给多个节点30的每一个。而且,如果结束了步骤S124的处理,则集群管理部24使处理返回到步骤S111。
[0123]另外,在不是起动之后最初的数据保持表的接收事件的情况下(步骤S121的否),在步骤S125中,集群管理部24对表存储部21的数据保持表进行更新。而且,如果结束了步骤S125的处理,则集群管理部24使处理返回到步骤S111。
[0124]另一方面,在检测出第一定周期事件的情况下,在步骤S131中,集群管理部24判断是否在从上次的第一定周期事件到这次的第一定周期事件为止的期间,从多个节点30的全部接收到了数据保持表。在从多个节点30的全部接收到了数据保持表的情况下(步骤S131的是),集群管理部24使处理进入步骤S134。在从任意的节点30无法接收数据保持表的情况下(步骤S131的否),集群管理部24使处理进入步骤S132。
[0125]在步骤S132中,集群管理部24进行将无法接收数据保持表的节点30从数据库系统10割离的处理。接着,在步骤S133中,集群管理部24从数据保持表中删除割离了的节点30的内容,对数据保持表进行更新。如果结束了步骤S133的处理,则集群管理部24使处理进入步骤S134。
[0126]在步骤S134中,集群管理部24使第一分配部22计算出下次任务表。其中,关于利用第一分配部22计算下次任务表的计算处理,将参照图13来进行说明。
[0127]接着,在步骤S135中,集群管理部24判断下次任务表是否发生了变化。例如,在割离了发生故障的节点30的情况下、追加了新的节点30的情况下,或者长期同步处理结束而被分配为备份的节点30发生变更的情况下,下次任务表发生变化。
[0128]在下次任务表未变化的情况下(步骤S135的否),集群管理部24使处理返回到步骤S111。在下次任务表发生了变化的情况下(步骤S135的是),在步骤S136中,集群管理部24将变化后的下次任务表分发给多个节点30的每一个。而且,如果结束了步骤S136的处理,则集群管理部24使处理返回到步骤S111。
[0129]另外,另一方面在检测出第二定周期事件的情况下,在步骤S141中,集群管理部24使第二分配部23计算出目标任务表。其中,关于利用第二分配部23计算目标任务表的计算处理,将参照图14来进行说明。
[0130]接着,在步骤S142中,集群管理部24将计算出的目标任务表分发给多个节点30的每一个。而且,如果结束了步骤S142的处理,则集群管理部24使处理返回到步骤S111。
[0131]图13是表示由管理装置20的第一分配部22进行的下次任务表的计算处理的流程的图。第一分配部22在图12的步骤S123以及步骤S134中被集群管理部24调出,执行以下的步骤S211?步骤S220的处理。
[0132]首先,在步骤S211中,第一分配部22对下次任务表进行初始化。此时,第一分配部22使下次任务表的多个节点30的每一个与数据保持表的节点30建立对应。由此,第一分配部22能够将因故障发生而被割离的节点30以及新追加的节点30反映到下次任务表。
[0133]接着,在步骤S212与步骤S220之间,第一分配部22按每个分区执行循环处理。例如,在将数据库分割成第一至第三分区的情况下,第一分配部22以第一分区、第二分区以及第三分区的每一个作为对象,执行步骤S212至步骤S220的处理。
[0134]在每个分区的循环处理内,首先在步骤S213中,第一分配部22针对对象的分区选择在数据保持表中具有最大的时间戳的节点30的集合。在本例中,时间戳是每当对象的分区的数据集合被更新便逐个加I的值。因此,在步骤S213中,第一分配部22针对对象的分区能够选择存储了最新的数据集合的节点30的集合。
[0135]接着,在步骤S214中,第一分配部22从在步骤S213中选择出的节点30的集合之中,选择在下次任务表中被分配为属主以及备份的分区的数量最少的一个节点30,将选择出的节点30分配为属主。由此,第一分配部22能够将存储有最新的数据集合的节点30的集合中负荷最小的节点30分配为属主。
[0136]此外,在被分配为属主以及备份的分区的数量最少的节点30存在多个的情况下,第一分配部22也可以使运算能力高的节点30比运算能力低的节点30优先分配为属主。取而代之,第一分配部22也可以使接受访问请求的次数少的节点30比接受访问请求的次数多的节点30优先分配为属主。
[0137]接着,在步骤S215中,第一分配部22针对对象的分区,将被分配为属主的节点30除外,选择具有与最大时间戳之差为一定范围内的时间戳的节点30的集合。由此,第一分配部22能够针对对象的分区,选择存储有最新的数据集合或者与最新的数据集合比较接近的数据集合的节点30的集合。
[0138]接着,在步骤S216与步骤S219之间,第一分配部22执行与复制的次数对应的循环处理。这里,复制的次数是指在被分配为属主的节点30之间能够复制处理的最大的节点30的个数。即,复制的次数与能够分配的备份的数量相同。
[0139]在与复制的次数对应的循环处理内,首先在步骤S217中,第一分配部22判断在由步骤S215选择出的节点30的集合之中是否存在能够分配为备份的节点30。当存在能够分配为备份的节点30时(步骤S217的是),第一分配部22使处理进入步骤S218。
[0140]当没有能够分配为备份的节点30时(步骤S217的否),第一分配部22强制地跳出与复制的次数对应的循环处理,使处理进入步骤S220。即,因此,有时第一分配部22计算出不存在备份、或备份的数量小于复制的次数的下次任务表。
[0141]在步骤S218中,第一分配部22从由步骤S215选择出的节点30的集合之中,将在下次任务表中被分配为属主以及备份的分区的数量最少的节点30分配为备份。由此,第一分配部22能够分配存储有最新的数据集合或者与最新的数据集合接近的数据的节点30的集合中负荷按从小到大的顺序备份的节点30。
[0142]此外,在被分配为属主以及备份的分区的数量最少的节点30存在多个的情况下,第一分配部22也可以使运算能力高的节点30比运算能力低的节点30优先分配为备份。取而代之,第一分配部22也可以使接受访问请求的次数少的节点30比接受访问请求的次数多的节点30优先分配为备份。
[0143]而且,第一分配部22从选择出的节点30的集合将被分配为备份的节点30除外,使处理进入步骤S219。在步骤S219中,第一分配部22在步骤S216到步骤S219的处理次数比复制的次数少的情况下使处理返回到步骤S216,在与复制的次数一致的情况下使处理进入步骤S220。
[0144]接着,在步骤S220中,第一分配部22在对全部的分区没有执行步骤S212到步骤S220的处理的情况下,使处理返回到步骤S216。而且,第一分配部22在对全部的分区执行了步骤S212到步骤S220的处理的情况下,结束下次任务表的计算而跳出本流程。
[0145]如上所述,根据第一分配部22,通过对多个分区的全部分配作为属主的节点30,能够至少使数据库发挥功能。并且,根据第一分配部22,通过尽量分配作为备份的节点30,能够担保数据库的冗余度。进而,根据第一分配部22,通过从负荷最小的节点30按顺序分配作为属主以及备份的节点30,能够使多个节点30各自的负荷均衡。
[0146]图14是表示利用管理装置20的第二分配部23计算目标任务表的计算处理的流程的图。第二分配部23在图12的步骤S141中被集群管理部24调出,执行以下的步骤S311?步骤S324的处理。
[0147]首先,在步骤S311中,第二分配部23对目标任务表进行初始化。此时,第二分配部23使目标任务表的多个节点30的每一个与数据保持表的节点30建立对应付。由此,第二分配部23能够将因故障发生而被割离的节点30以及新追加的节点30反映到目标任务表。
[0148]接着,在步骤S312中,第二分配部23将当前任务表的分区以被分配的属主以及备份的合计数按升序排序。由此,第二分配部23能够从被分配为备份的节点30少的分区开始按顺序分配备份的候补。即,第二分配部23能够在当前任务表中从冗余度少的分区开始按顺序分配作为备份的候补的节点30。
[0149]接着,在步骤S313中,第二分配部23对多个节点30的每一个所对应的负荷值进行初始化。负荷值是对应于对节点30分配了备份的候补的任务而增加的值。作为一个例子,第二分配部23将各自的负荷值初始化为“O”。
[0150]接着,在步骤S314与步骤S324之间,第二分配部23按每个分区执行循环处理。该情况下,第二分配部23以在步骤S312中重新排列的当前任务表的分区的顺序来选择对象的分区,执行循环处理。
[0151]在每个分区的循环处理内,首先在步骤S315中,第二分配部23针对对象的分区选择数据保持表中最大的时间戳的节点30。
[0152]接着,在步骤S316中,第二分配部23将当前任务表的节点30以值V按降序排序。这里,值V是针对被分配为属主的节点30 “+ I”、针对被分配为备份的节点30 “+ I”、以及针对最大的时间戳的节点30 “+ I”的值。因此,不是属主、也不是备份且时间戳也不是最大的节点30的值V为“O”。
[0153]由此,第二分配部23能够将被分配为属主以及备份的节点30或者存储最新的数据集合的节点30先分配为作为备份的候补的节点30。
[0154]其中,在排列有多个值V相同的节点30的情况下,第二分配部23将运算能力高的节点30配置到上位以使其先成为备份的候补。由此,第二分配部23可以按照运算能力高的节点30比运算能力低的节点30优先成为属主或者备份的方式,来分配作为备份的候补的节点30。取而代之,第二分配部23也可以将接受访问请求的次数少的节点30配置到上位以使其先成为备份的候补。由此,第二分配部23能够按照接受访问请求的次数少的节点30比接受访问请求的次数多的节点30优先成为属主或者备份的方式,来分配作为备份的候补的节点30。
[0155]接着,在步骤S317中,第二分配部23通过下述式(I)来计算作为常量的上限权重MLOAD。
[0156]MLOAD = {分区的数X (复制数+ I) + (节点数一I)} +节点数…(I)
[0157]这里,(复制数+ I)表示针对一个分区能够分配的属主以及备份的最大数。这样的上限权重MLOAD表示针对一个节点30能够分配为备份的候补的数量的上限基准。
[0158]接着,在步骤S318与步骤S323之间,第二分配部23按每个节点30执行循环处理。该情况下,第二分配部23以在步骤S316中重新排列的当前任务表的顺序来选择对象的节点30,执行循环处理。
[0159]在每个节点30的循环处理内,首先在步骤S319中,第二分配部23判断是否对(复制的数+ I)个节点30分配了作为备份的候补的节点30。在对(复制的数+ I)个节点30分配了备份的候补的情况下(步骤S319的是),使处理进入步骤S324。该情况下,第二分配部23针对对象的分区分配最大数的作为备份的候补的节点30。
[0160]第二分配部23在未对(复制的数+ I)个节点30分配备份的候补的情况下(步骤S319的否),使处理进入步骤S320。
[0161]在步骤S320中,第二分配部23判断成为对象的节点30的负荷值是否小于上限权重ML0AD。在成为对象的节点30的负荷值小于上限权重MLOAD的情况下(步骤S320的是),第二分配部23使处理进入步骤S321。
[0162]在成为对象的节点30的负荷值为上限权重MLOAD以上的情况下(步骤S320的否),第二分配部23使处理进入步骤S323。由此,第二分配部23在对某一个节点30分配了基准值以上的作为备份的候补的任务的情况下,能够避免将该节点30继续分配为备份的候补。结果,第二分配部23可以将作为备份的候补的任务分散分配给多个节点30。
[0163]在步骤S321中,第二分配部23针对对象的分区分配对象的节点30作为备份的候补。接着,在步骤S322中,第二分配部23通过对对象的节点30的负荷值加“I”来进行更新。由此,第二分配部23能够每当被分配为候补时便使节点30的负荷值增加I。如果结束了步骤S322的处理,则第二分配部23使处理进入步骤S323。
[0164]接着,在步骤S323中,第二分配部23在没有对多个节点30的全部执行步骤S318到步骤S323的处理的情况下,使处理返回到步骤S318。另外,第二分配部23在对多个节点30的全部执行了步骤S318到步骤S223的处理的情况下,使处理进入步骤S324。
[0165]接着,在步骤S324中,第二分配部23在没有针对多个分区的全部执行步骤S314到步骤S324的处理的情况下,使处理返回到步骤S314。而且,第二分配部23在针对多个分区的全部执行了步骤S314到步骤S324的处理的情况下,结束目标任务表的计算而跳出本流程。
[0166]如上所述,根据第二分配部23,由于从冗余度少的(即,被分配的备份的数量少的)分区开始按顺序分配备份的候补,所以能够高效地确保数据库的冗余度。并且,根据第二分配部23,由于对分配了的备份的候补的数为基准值以上的节点30不进一步分配备份的候补,所以能够对多个节点30分散分配备份的候补。
[0167]图15是表示节点30的访问处理部33的处理流程的图。访问处理部33执行以下的步骤S411?步骤S433的处理。
[0168]首先,在步骤S411中,访问处理部33检测来自客户端的请求接收事件或者基于复制处理的请求接收事件。在经由网络从客户端接收到针对数据库的访问请求的情况下,产生来自客户端的请求接收事件。在经由网络从成为属主的其他节点30接收到基于复制处理的更新请求或者登记请求的情况下,产生基于复制处理的请求接收事件。
[0169]访问处理部33在检测出来自客户端的请求接收事件的情况下,使处理进入步骤S421。访问处理部33在检测出基于复制处理的请求接收事件的情况下,使处理进入步骤S431。
[0170]在检测出来自客户端的请求接收事件的情况下,在步骤S421中,访问处理部33例如进行计算来取得来自客户端的访问请求所表示的请求目的地的分区的编号。接着,在步骤S422中,访问处理部33参照当前任务表来判断针对请求目的地的分区自节点是否被分配为属主。
[0171]在针对请求目的地的分区自节点未被分配为属主的情况下(步骤S422的否),在步骤S423中,访问处理部33向客户端通知被分配为属主的节点30的编号,然后使处理返回到步骤S411。
[0172]在针对请求目的地的分区自节点被分配为属主的情况下(步骤S422的是),在步骤S424中,访问处理部33判断访问请求的类型是参照还是更新或登记。
[0173]在访问请求的类型是参照的情况下(步骤S424的参照),在步骤S425中,访问处理部33从数据贮存部31读出有参照请求的数据并发送至客户端,使处理返回到步骤S411。
[0174]在访问请求的类型是更新或者登记的情况下(步骤S424的更新/登记),在步骤S426中,针对请求目的地的分区,与被分配为备份的其他节点30之间执行复制处理。即,访问处理部33将与从客户端接收到的更新或者登记的请求相同的访问请求向被分配为备份的节点30发送。
[0175]如果复制处理结束,则接着在步骤S427中,访问处理部33按照从客户端发送来的更新或者登记请求,进行数据贮存部31中存储的数据的更新或者对数据贮存部31进行新的数据的登记。接着,在步骤S428中,访问处理部33通过加I处理来对数据保持表的时间戳进行更新,然后使处理返回到步骤S411。
[0176]另一方面,访问处理部33在检测出基于复制处理的请求接收事件的情况下,在步骤S431中,根据从成为属主的节点30发送来的更新或者登记请求,进行数据贮存部31中存储的数据的更新或者对数据贮存部31进行新的数据的登记。接着,在步骤S432中,访问处理部33通过加I处理对数据保持表的时间戳进行更新。接着,在步骤S433中,访问处理部33向属主通知登记或者更新结束,然后使处理返回到步骤S411。
[0177]此外,访问处理部33也可以在步骤S425以及步骤S428中,从客户端接收包括一系列访问请求的事项,来执行与来自客户端的访问请求对应的事项处理。另外,访问处理部33也可以在步骤S426中,当通过复制处理发送更新或者登记的请求时,向被分配为备份的节点30发送包括一系列访问请求的事项。另外,访问处理部33也可以在步骤S431中,从成为属主的节点30接收包括一系列访问请求的事项,来执行与来自成为属主的节点30的访问请求对应的事项处理。
[0178]图16是表示节点30的节点管理部34的处理流程的图。节点管理部34执行以下的步骤S511?步骤S541的处理。
[0179]首先,在步骤S511中,节点管理部34对第三定周期事件、下次任务表的接收事件或者目标任务表的接收事件进行检测。第三定周期事件定期产生。下次任务表的接收事件在节点管理部34接收到下次任务表的情况下产生。目标任务表的接收事件在节点管理部34接收到目标任务表的情况下产生。
[0180]节点管理部34在检测出第三定周期事件的情况下,使处理进入步骤S521。节点管理部34在检测出下次任务表的接收事件的情况下,使处理进入步骤S531。节点管理部34在检测出目标任务表的接收事件的情况下,使处理进入步骤S541。
[0181]在检测出第三定周期事件的情况下,在步骤S521中,节点管理部34将表存储部32中存储的数据保持表发送给管理装置20的集群管理部24。然后,节点管理部34使处理返回到步骤S511。
[0182]在检测出下次任务表的接收事件的情况下,在步骤S531中,如果访问处理部33正执行事项,则节点管理部34使处理中断。接着,在步骤S532中,节点管理部34根据接收到的下次任务表,执行短期同步处理。
[0183]具体而言,在成为属主的节点30与成为备份的节点30之间存储的数据集合存在不同的情况下,节点管理部34针对多个分区的每一个,使访问处理部33执行与复制处理同样的处理。由此,节点管理部34针对多个分区的每一个,能够取得被分配为属主的节点30与被分配为备份的节点30之间的同步。而且,节点管理部34针对多个分区的每一个,使访问处理部33执行与被下次任务表分配的新的任务(属主以及备份)对应的处理。
[0184]如果短期同步处理结束,则接着在步骤S533中,节点管理部34将当前任务表改写成下次任务表的内容。由此,访问处理部33能够接受来自客户端的访问请求。
[0185]接着,在步骤S534中,节点管理部34进行中断而重新开始事项。然后,节点管理部34使处理返回到步骤S511。
[0186]在检测出目标任务表的接收事件的情况下,在步骤S541中,节点管理部34对表存储部32中存储的目标任务表进行更新。然后,节点管理部34使处理返回到步骤S511。
[0187]图17是表示节点30的转送部35的处理流程的图。转送部35执行以下的步骤S611?步骤S618的处理以及步骤S621?步骤S622的处理。
[0188]首先,在步骤S611中,转送部35判断CPU12的负荷是否大于预先决定的基准值。在负荷大于基准值的情况下(步骤S611的是),在步骤S612中,转送部35待机(sleep) —定时间后,使处理返回到步骤S611。
[0189]在负荷为基准值以下的情况下(步骤S611的否),在步骤S613中,转送部35检测当前任务表与目标任务表之间的差。接着,在步骤S614中,转送部35判断当前任务表与目标任务表之间是否存在差。
[0190]当在当前任务表与目标任务表之间不存在差时(步骤S614的否),在步骤S615中,如果当前任务表、下次任务表以及目标任务表的任意一个中存在未对自节点分配任务的分区,则转送部35将该数据集合消除。而且,转送部35在步骤S615的处理之后,使处理返回到步骤S611。
[0191]当在当前任务表与目标任务表之间存在差时(步骤S614的是),在步骤S616中,转送部35针对在当前任务表中自节点为属主的分区,检测在目标任务表为备份的候补且在当前任务表中不是属主也不是备份的其他节点30。
[0192]接着,在步骤S617中,转送部35判断是否存在在目标任务表中是备份的候补、在当前任务表中不是属主也不是备份的其他节点30。在不存在的情况下(步骤S617的否),转送部35使处理返回到步骤S611。
[0193]在存在的情况下(步骤S617的是),在步骤S618中,转送部35不将针对来自客户端的访问请求的处理中断地开始长期同步处理。具体而言,关于在当前任务表中自节点被分配为属主的分区,转送部35针对被目标任务表分配为备份的候补且未被当前任务表分配为属主也未被分配为备份的其他节点30发送该分区的数据集合。该情况下,转送部35通过不阻碍访问处理部33对事项的执行的后台发送数据集合。由此,转送部35能够不降低针对来自客户端的访问请求的响应速度等地执行长期同步处理。
[0194]而且,如果结束了步骤S618的处理,则转送部35使处理返回到步骤S611。
[0195]另一方面,具备被目标任务表分配为备份的候补且未被当前任务表分配为属主也未被分配为备份的分区的其他节点30的转送部35执行以下的步骤S621以及步骤S622的处理。
[0196]在步骤S621中,转送部35不中断针对来自客户端的访问请求的处理地执行长期同步处理。具体而言,转送部35针对被目标任务表分配为备份的候补且未被当前任务表分配为属主也未被分配为备份的分区,从被分配为属主的节点30接收数据集合。该情况下,转送部35通过不阻碍访问处理部33对事项的执行的后台来接收数据集合。
[0197]接着,在步骤S622中,转送部35对数据保持表进行更新。如果长期同步处理结束,则由于成为属主的节点30中存储的数据集合的副本被存储,所以转送部35通过对数据保持表进行更新,能够使该分区的时间戳与属主的数据保持表的时间戳一致。然后,如果转送部35结束了步骤S622的处理,则转送部35结束本流程。
[0198]如以上那样,根据转送部35,由于在被分配为备份的候补的节点30中生成被分配为属主的节点30的数据集合的副本,所以能够新产生可成为属主或者备份的节点30。
[0199]参照图18?图24,对数据库系统10的动作例进行说明。图18是表示针对3个分区# I?# 3的每一个分配了作为属主以及备份的节点30的情况下的、节点30 — A至节点30 — C各自的状态的图。
[0200]在本例中,如图18的当前任务表所示,针对分区# 1,节点30 — A被分配为属主,节点30 — B被分配为备份。另外,针对分区# 2,节点30 — B被分配为属主,节点30 — C被分配为备份。另外,针对分区# 3,节点30 — C被分配为属主,节点30 — A被分配为备份。
[0201]节点30 — A以及节点30 — B根据事项来执行针对分区# I的复制处理。结果,如图18的数据保持表所示,分区# I的时间戳在节点30 — A以及节点30 — B中成为相同值。
[0202]另外,节点30 — B以及节点30 — C基于事项来执行针对分区# 2的复制处理。结果,如图18的数据保持表所示,分区# 2的时间戳在节点30 — B以及节点30 — C中成为相同值。
[0203]另外,节点30 — C以及节点30 — A基于事项来执行针对分区# 3的复制处理。结果,如图18的数据保持表所示,分区# 3的时间戳在节点30 — C以及节点30 — A中成为相同值。
[0204]图19是表示对应于从图18的状态开始节点30 — C发生了故障而执行了短期同步处理之后的、节点30 — A至节点30 — C各自的状态的图。设管理装置20的集群管理部24从图18的状态开始无法从节点30 — C检测出数据保持表,检测为节点30 — C发生了故障。
[0205]当多个节点30中的任意节点30发生了故障时,管理装置20的集群管理部24将发生了故障的节点30割离,并且使第一分配部22计算出下次任务表。
[0206]对应于来自集群管理部24的调出,第一分配部22将发生了故障的节点30除外来再次分配作为属主以及备份的节点30,生成下次任务表。该情况下,第一分配部22为了至少使数据库发挥功能而按照至少存在属主的方式对多个分区的每一个分配节点30。例如,第一分配部22在作为属主的节点30发生了故障的情况下,将作为备份的节点30分配为属主。并且,第一分配部22为了进一步提高数据库的冗余度而按照尽量存在备份的方式对多个分区的每一个分配节点30。
[0207]在本例中,再分配的结果如图19的下次任务表所示,针对分区# 1,节点30 — A被分配为属主,节点30 — B被分配为备份。另外,针对分区# 2,节点30 — B被分配为属主。另外,针对分区# 3,节点30 — A被分配为属主。
[0208]而且,集群管理部24将下次任务表分发给节点30 — A以及节点30 — B。节点30 -A以及节点30 — B各自的节点管理部34若接收到下次任务表则执行短期同步处理,并且,将当前任务表的内容改写为下次任务表的内容。由此,节点30 — A以及节点30 — B的每一个能够执行与新被分配的任务对应的处理。
[0209]图20是表示从图19的状态开始执行的长期同步处理的一个例子的图。另外,管理装置20的集群管理部24在将发生了故障的节点30 — C割离的情况下,使第二分配部23计算出目标任务表。
[0210]对应于来自集群管理部24的调出,第二分配部23将发生了故障的节点30除外来再次分配作为备份的候补的节点30,生成目标任务表。该情况下,第二分配部23为了提高数据库的冗余度而按照至少存在属主以及备份的方式对多个分区的每一个分配作为候补的节点30。
[0211]在图19的状态下,不存在针对分区# 2以及分区# 3的备份的节点30。因此,第二分配部23将节点30 — A分配为针对分区# 2的备份的候补,将节点30 — B分配为针对分区# 3的备份的候补。
[0212]此外,在本例中,第二分配部23将已经被当前任务表分配为属主以及备份的节点30也分配为备份的候补。因此,如图20的目标任务表所示,针对分区# I?# 3的每一个分配节点30 — A以及节点30 — B双方作为备份的候补。
[0213]而且,集群管理部24将目标任务表分发给节点30 — A以及节点30 — B。节点30 -A以及节点30 — B各自的转送部35针对当前任务表与目标任务表之差的部分执行长期同步处理。即,节点30 — B的转送部35通过后台将分区# 2的数据集合发送给节点30 -A0另外,节点30 — A的转送部35通过后台将分区# 3的数据集合发送给节点30 —B0
[0214]需要说明的是,此时转送部35不中断针对来自客户端的访问请求的处理地执行长期同步处理。
[0215]如果长期同步处理结束,则节点30 — A能够存储分区# 2的数据集合的副本。并且,如图20的数据保持表所示,此时的分区# 2的时间戳在节点30 — A以及节点30 — B成为相同值。
[0216]另外,节点30 — B能够存储分区# 3的数据集合的副本。并且,如图20的数据保持表所示,分区# 3的时间戳在节点30 — A以及节点30 — B中成为相同值。
[0217]图21是表示对应于图20的长期同步处理结束而执行了短期同步处理之后的、节点30 — A至节点30 — C各自的状态的图。管理装置20的集群管理部24定期调出第一分配部22来使其计算出下次任务表。
[0218]在长期同步处理结束之后被从集群管理部24调出的情况下,第一分配部22利用通过长期同步处理生成的副本进一步提高冗余度的方式,针对多个分区的每一个再次分配作为属主以及备份的节点30。
[0219]在本例中,如图21的下次任务表所示,针对分区# 1,节点30 — A被分配为属主,节点30 — B被分配为备份。另外,针对分区# 2,节点30 — B被分配为属主,节点30 — A被分配为备份。另外,针对分区# 3,节点30 — A被分配为属主,节点30 — B被分配为备份。
[0220]而且,集群管理部24将下次任务表分发给节点30 — A以及节点30 — B。节点30-A以及节点30 — B各自的节点管理部34如果接收到下次任务表则执行短期同步处理,并且,将当前任务表的内容改写成下次任务表的内容。由此,节点30 — A以及节点30 —B的每一个能够执行与新被分配的任务对应的处理。
[0221]图22是表示从图21的状态开始追加了节点30 — D的情况下的、节点30 — A至节点30 — D各自的状态的图。管理装置20的集群管理部24例如检测出从图21的状态开始新追加了节点30 — D。
[0222]集群管理部24如图22的数据保持表所示,生成追加了节点30 — D的数据保持表。第一分配部22对应于向数据保持表追加了节点30 — D而生成被追加了节点30 — D的下次任务表。
[0223]原本,节点30 — D不存储数据集合。因此,第一分配部22在追加了节点30 — D之后不变更属主以及备份的分配。
[0224]图23是表示从图22的状态开始执行的长期同步处理的一个例子的图。在追加了新的节点30的情况下,第二分配部23针对多个分区的每一个再次分配包括新的节点30在内的作为备份的候补的节点30。该情况下,第二分配部23按照被分配的属主以及备份的数量之差为在节点30间预先决定的值的范围内的方式,针对多个分区的每一个分配作为备份的候补的节点30。
[0225]在本例中,再分配的结果如图23的目标任务表所示,针对分区# I,节点30 — A以及节点30 — B被分配为备份的候补。另外,针对分区# 2,节点30 — B以及节点30 — D被分配为备份的候补。另外,针对分区# 3,节点30 — A以及节点30 — D被分配为备份的候补。
[0226]而且,集群管理部24将目标任务表分发给节点30 — A、节点30 — B以及节点30 —D0节点30 - A、节点30 — B以及节点30 — D各自的转送部35针对当前任务表与目标任务表之差的部分执行长期同步处理。
[0227]S卩,节点30 — B的转送部35通过后台将分区# 2的数据集合发送给节点30 — D。另外,节点30 — A的转送部35通过后台将分区# 3的数据集合发送给节点30 — D。其中,此时,转送部35不中断针对来自客户端的访问请求的处理地执行长期同步处理。
[0228]结果,节点30 — D能够存储分区# 2的数据集合的副本。并且,如图23的数据保持表所示,分区# 2的时间戳在节点30 — B以及节点30 — D中成为相同值。
[0229]另外,节点30 — D能够存储分区# 3的数据集合的副本。并且,如图23的数据保持表所示,分区# 3的时间戳在节点30 — A以及节点30 — D中成为相同值。
[0230]图24是表示对应于图23的长期同步处理结束而执行了短期同步处理后的、节点30-A至节点30 — D各自的状态的图。在长期同步处理结束后被从集群管理部24调出的情况下,第一分配部22针对多个分区的每一个,按照利用由长期同步处理生成的副本使节点30间的负荷更均衡的方式,再次分配作为属主以及备份的节点30。
[0231]在本例中,再分配的结果如图24的下次任务表所示,针对分区# 1,节点30 — A被分配为属主,节点30 — B被分配为备份。另外,针对分区# 2,节点30 — B被分配为属主,节点30 — D被分配为备份。另外,针对分区# 3,节点30 — A被分配为属主,节点30 — D被分配为备份。
[0232]而且,集群管理部24将下次任务表分发给节点30 — A、节点30 — B以及节点30 —D0节点30 - A、节点30 — B以及节点30 — D各自的节点管理部34在接收到下次任务表后执行短期同步处理,并且,将当前任务表的内容改写为下次任务表的内容。由此,节点30 —A、节点30 — B以及节点30 — D的每一个能够执行与新被分配的任务对应的处理。
[0233]综上所述,根据本实施方式涉及的数据库系统10,由于对作为备份的候补的节点30进行分配而从作为属主的节点30向作为候补的节点30进行数据集合的转送,所以能够使数据库具有冗余度且使节点30的处理的负荷均衡。并且,根据数据库系统10,由于能够不中断针对来自客户端的访问请求的处理地执行这样的处理,所以即使在割离节点30或新追加节点30的情况下,也能不使系统停止地进行数据的重新配置。
[0234]另外,本实施方式的管理装置20以及节点30中执行的程序被以能够安装的形式或者能够执行的形式的文件记录到CD — ROM、软盘(FD)、CD — R、DVD (Digital VersatileDisk)等计算机可读取的记录介质中来进行提供。
[0235]另外,也可以构成为将本实施方式的管理装置20以及节点30中执行的程序储存到与因特网等网络连接的计算机上,通过经由网络下载来进行提供。另外,还可以构成为将本实施方式的管理装置20以及节点30中执行的程序经由因特网等网络提供或者分发。
[0236]另外,也可以构成为将本实施方式的管理装置20以及节点30中执行的程序预先编写到ROM等中来进行提供。
[0237]本实施方式的管理装置20所执行的程序成为包括上述各部(表存储部21、第一分配部22,第二分配部23以及集群管理部24)的模块构成,作为实际的硬件,通过CPU (处理器)从上述存储介质读出程序并执行来将上述各部加载到主存储装置上,表存储部21、第一分配部22、第二分配部23以及集群管理部24在主存储装置上生成。
[0238]另外,本实施方式的节点30所执行的程序成为包括上述各部(数据贮存部31、表存储部32、访问处理部33、节点管理部34以及转送部35)的模块构成,作为实际的硬件,通过CPU (处理器)从上述存储介质读出程序并执行来将上述各部加载到主存储装置上,数据贮存部31,表存储部32、访问处理部33、节点管理部34以及转送部35在主存储装置上生成。
[0239]对本发明的几个实施方式进行了说明,但这些实施方式只是例示,并不意图限定发明的范围。这些新的实施方式能够通过其他各种方式来实施,在不脱离发明主旨的范围可进行各种省略、置换、变更。这些实施方式及其变形包含在发明的范围、主旨中,并且,属于技术方案所记载的发明和其等同的范围。
[0240]符号说明
[0241]10-数据库系统;12-CPU ;13_存储器;14-通信I / F ; 15-贮存器I / F;16_外部存储装置;20_管理装置;21_表存储部;22_第一分配部;23_第二分配部;24_集群管理部;30-节点;31-数据贮存部;32-表存储部;33_访问处理部;34_节点管理部;35_转送部。
【权利要求】
1.一种数据库系统,具备存储数据库的多个节点和管理所述多个节点的管理装置, 所述管理装置具有: 第一分配部,根据所述多个节点各自的状况的变更,来分配存储数据集合并受理对所述数据集合的访问请求的第一节点、以及存储所述数据集合并成为所述第一节点的备份的第二节点,对所述多个节点的每个节点指示与分配对应的动作;和 第二分配部,根据所述多个节点的状况并根据所述第一节点以及所述第二节点的分配状况的变更,分配作为所述第一节点或者所述第二节点的候补的第三节点,对所述多个节点的每个节点指示用于使所述第三节点作为所述第一节点或者所述第二节点进行动作的准备, 所述多个节点的每个节点具有将所述第一节点或者所述第二节点的数据集合向所述第三节点发送的转送部。
2.根据权利要求1所述的数据库系统, 所述多个节点将所述数据库分割成多个分区进行存储, 所述第一分配部针对所述多个分区的每个分区分配所述第一节点以及所述第二节点, 所述第二分配部针对所述多个分区的每个分区分配所述第三节点。
3.根据权利要求2所述的数据库系统, 所述第一分配部生成第一表,通过将所述第一表分发给所述多个节点的每个节点来指示与分配对应的动作,所述第一表表示针对多个分区的每个分区,所述多个节点的每个节点是所述第一节点还是所述第二节点, 所述第二分配部生成第二表,通过将所述第二表分发给所述多个节点的每个节点来指示所述准备,所述第二表表示针对多个分区的每个分区,所述多个节点的每个节点是否是所述第三节点。
4.根据权利要求2所述的数据库系统, 在数据集合向所述第三节点的发送已结束的情况下,所述第一分配部针对所述多个分区的每个分区再次分配所述第一节点以及所述第二节点。
5.根据权利要求4所述的数据库系统, 在所述多个节点中任意的节点发生了故障的情况下, 所述第一分配部将所述发生了故障的节点除外,再次分配所述第一节点以及所述第二节点, 所述第二分配部将所述发生了故障的节点除外,再次分配所述第三节点。
6.根据权利要求5所述的数据库系统, 所述第二分配部针对所述多个分区的每个分区,按照至少存在所述第一节点以及所述第二节点的方式来分配所述第三节点。
7.根据权利要求4所述的数据库系统, 在追加了新的节点的情况下,所述第二分配部针对所述多个分区的每个分区将所述新的节点包括在内再次分配所述第三节点。
8.根据权利要求7所述的数据库系统, 所述第二分配部按照被分配的所述第一节点与所述第二节点的数量之差成为在节点间预先决定的值的范围内的方式,针对所述多个分区的每个分区分配所述第三节点。
9.根据权利要求8所述的数据库系统, 所述第二分配部按照运算能力高的节点比运算能力低的节点优先成为所述第一节点或者所述第二节点的方式来分配所述第三节点。
10.根据权利要求8所述的数据库系统, 所述第二分配部按照受理所述访问请求的数量少的节点比受理所述访问请求的数量多的节点优先成为所述第一节点或者所述第二节点的方式来分配所述第三节点。
11.根据权利要求1所述的数据库系统, 所述多个节点的每个节点还具有访问处理部,所述访问处理部受理包括针对所述第一节点的分区的一系列访问请求在内的事项来执行与来自客户端的访问请求对应的处理,在执行所述分区的数据集合的更新或者登记的访问请求的情况下,向所述第二节点发送包括一系列访问请求在内的事项并使其执行该事项, 所述转送部将所述第一节点或者所述第二节点的所述分区的数据集合通过不妨碍所述事项的执行的后台发送给所述第三节点。
12.—种管理装置,是对存储数据库的多个节点进行管理的管理装置, 所述管理装置具有: 第一分配部,根据所述多个节点各自的状况的变更,来分配存储数据集合并受理对所述数据集合的访问请求的第一节点、以及存储所述数据集合并成为所述第一节点的备份的第二节点,对所述多个节点的每个节点指示与分配对应的动作;和 第二分配部,根据所述多个节点的状况并根据述第一节点以及所述第二节点的分配状况的变更,分配作为所述第一节点或者所述第二节点的候补的第三节点,针对所述多个节点的每个节点指示用于使所述第三节点作为所述第一节点或者所述第二节点进行动作的准备, 所述多个节点的每个节点具有将所述第一节点或者所述第二节点的数据集合向所述第三节点发送的转送部。
13.一种节点,是权利要求1所述的数据库系统中具备的节点。
14.一种程序,用于使计算机作为权利要求1所述的数据库系统中具备的管理装置发?车功能。
15.一种程序,用于使计算机作为权利要求1所述的数据库系统中具备的节点发挥功倉泛。
16.一种数据处理方法,是具备存储数据库的多个节点和管理所述多个节点的管理装置的数据库系统中的数据处理方法, 所述管理装置执行: 第一分配步骤,根据所述多个节点各自的状况的变更,来分配存储数据集合并受理对所述数据集合的访问请求的第一节点、以及存储所述数据集合并成为所述第一节点的备份的第二节点,对所述多个节点的每个节点指示与分配对应的动作;和 第二分配步骤,根据所述多个节点的状况并根据所述第一节点以及所述第二节点的分配状况的变更,分配作为所述第一节点或者所述第二节点的候补的第三节点,针对所述多个节点的每个节点指示用于使所述第三节点作为所述第一节点或者所述第二节点进行动作的准备, 所述多个节点的每个节点执行将所述第一节点或者所述第二节点的数据集合向所述第三节点发送的转送步骤。
【文档编号】G06F11/20GK104185841SQ201380003048
【公开日】2014年12月3日 申请日期:2013年3月12日 优先权日:2013年3月12日
【发明者】服部雅一 申请人:株式会社东芝, 东芝解决方案株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1