具体实施方式
以下,参照附图对本发明的实施方式涉及的分布式数据库系统详细地进行说明。
(本发明实施方式涉及的分布式数据库系统的概要)
首先,对本发明实施方式涉及的分布式数据库系统的概要进行说明。图1是表示本发明实施方式涉及的分布式数据库系统的概要的结构图。本实施方式涉及的分布式关系数据库(以下,原则上将“关系数据库”省略为“RDB”,将“数据库”省略为“DB”。)的系统11构成为经由第一通信网21而连接一个主节点13和第一~第三从节点15、17、19之间。主节点13对多个从节点15、17、19进行总括管理。另外,节点13、15、17、19是具有信息处理功能的计算机。
作为分布式RDB系统11外部的结构元件,主节点13上经由第二通信网23而连接有多个客户终端25a、25b、25c。当主节点13接受自多个客户终端25a、25b、25c之中的任一个客户终端发行的键值注册请求、或者表结合操作等数据操作请求时,主节点13与第一~第三从节点15、17、19联合执行遵从该请求的处理,并将所获得到的处理结果作为响应而返回给有请求的客户终端。
主节点13具有对主数据进行存储的主数据存储部13a。主数据构成为包括DB元数据以及DB管理数据。DB元数据包括与多个从节点15、17、19在何处设置几个相关的物理结构表或表格属性的结构表等。DB管理数据包括后述的最新共享NID等共享管理数据。在此,作为本发明的主要特征,主节点13只是进行如下管理,而并没有将键值或者与键值相关的信息存储在主节点13自身或者主数据存储部13a中,其中,上述管理是指:将包括作为本来的管理对象的键值在内的、确定键值用的与键值相关的信息分布存储于第一~第三从节点15、17、19中。
第一~第三从节点15、17、19的每一个从节点分别具有对第一~第三局部数据进行存储的第一~第三局部数据存储部15a、17a、19a。另外,第一~第三从节点15、17、19以及第一~第三局部数据存储部15a、17a、19a的结构并列相等。因此,为了避免重复进行说明,以下通过代表性地对第一从节点15、第一局部数据以及第一局部数据存储部15a进行说明,来代替对其他的第二、第三从节点17、19、第二、第三局部数据以及第二、第三局部数据存储部17a、19a的说明。第一~第三局部数据存储部15a、17a、19a分别相当于DSN存储部、D-CRX存储部、D-CRS存储部以及D-RIX存储部。
第一局部数据构成为包括四种索引数据。即、第一分布式共享NID(以下称为“DSN”)、第一分布压缩复原索引(以下称为“D-CRX”)、第一分布压缩结果组超高速缓冲存储器(以下称为“D-CRS”)以及第一分布行识别索引(以下称为“D-RIX”)即为上述四种索引数据。关于这些索引数据,在后面详细进行叙述。
(多个从节点中的销售管理表的事务处理的一例)
对由本发明实施方式涉及的分布式RDB系统11生成的、多个从节点15、17、19中的销售管理表的事务处理的一例进行说明。图2A、图2B是表示多个从节点15、17、19中的销售管理表的事务处理的一例的表格。
当输入图2A、图2B所示那样的、将元组(行)和纵列(列)配置成二维形式的表格数据时,分布式RDB系统11作成分布关系数据模型的四种索引数据。图2A、图2B所示的输入行编号是用于唯一地识别输入行的标记,其从第一个按升序连续地分配。该输入行编号是由主节点13所附的标记,并没有赋予给实际的输入数据。
在图2A、图2B所示的表格的第一行填写了纵列的项目名,在该表格的第二行填写了数据型的类别(例如,字符串型或数值型、日期型等)。在图2A、图2B所示的表格中,对各自的元组分配了1~15来作为输入行编号。另外,在图2A、图2B所示的表格中,权利要求书中所述的“对构成分布式数据库的表格内的每个纵列取唯一的值的分布行标识符(以下称为‘RID’)”成为与输入行编号相等的值。
在图2A、图2B所示的表格中,在各自的元组的下部的栏中填写了各元组的属性值。其中,各元组的属性值是为了便于说明而填写的,其不包括在实际的输入数据中。作为该属性值,例如存在:以键值作为输入并参照DSN的数据而赋予的键值标识符(以下称为“NID”)、通过一致性哈希法所决定出的DSN的数据的存储位置节点编号(以下称为“DSN-CNN”)、同样通过一致性哈希法所决定出的D-CRX的数据的存储位置节点编号(以下称为“D-CRX-CNN”)、以及D-CRX-CNN的决定中所使用的D-CRX的块编号(以下称为“D-CRX-BN”)。在决定D-CRX-BN时使用块因子(以下称为“D-CRX-BF”)。另外,关于NID、DSN、DSN-CNN、D-CRX-CNN、D-CRX-BN以及D-CRX-BF,在后面详细叙述。
在图2A、图2B所示的表格中,将D-CRX-BN的决定中所使用的D-CRX-BF的值设为“7”,存储位置节点的数目对应于第一~第三从节点15、17、19的数目而呈3分布。作为CNN的标识符而分别给第一~第三从节点15、17、19赋予a~c。即、假设第一从节点15相当于CNN=a的存储位置节点,第二从节点17相当于CNN=b的存储位置节点,第三从节点19相当于CNN=c的存储位置节点,进行以后的说明。另外,在以下的说明中,由大括号{}包围要素的记号{i,j,k}表示以i、j、k作为要素的集合。
将成为管理对象的值的集合(以下称为“值集合”)的源称为键值。NID指的是用于唯一地识别键值的标记。该NID按照在分布式数据库的整体中注册请求涉及的键值所具有的数据型的范围内取唯一值的方式被分配给各自的键值。
简而言之,对于具有同一值的键值分配同一NID。在图2A、图2B所示的表格中尝试验证上述情况。在图2A之中的输入行编号为“1”的元组中,针对作为纵列的地域名被填写的键值即“北海道东北”,分配“2”来作为NID。另外,在图2A之中的输入行编号为“5”的元组中,针对作为纵列的地域名被填写的键值即“北海道东北”,与输入行编号为“1”的元组的例子同样地,分配“2”来作为NID。另外,在图2A、图2B所示的表格中,为了一看就能识别之后出现相同值的键值、之前出现相同值的键值、和与这些键值不相符的键值,对上述的前二者的填写栏赋予相互不同的带阴影修饰。
NID优选取自然数的值。其原因在于:在取代键值而采用NID来进行表结合操作等数据操作时,将该运算涉及的处理负载抑制得较低,从而能够谋求运算处理的高速化。关于其详细理由在后面叙述。另外,NID优选取序数的值。其原因在于:通过使最新共享NID的值增加这一极其简单的步骤,就能够对注册请求涉及的键值赋予唯一的NID。另外,在图2A、图2B所示的表格中,NID=0定义为无效值,NID=1定义为NULL值,NID=2以上定义为有效值。
作为用于将与键值相关的信息(DSN、D-CRX、D-CRS、D-RIX)分布于多个从节点15、17、19的分布方式,例如能够采用公知的一致性哈希法。但是,只要是在产生从节点(存储位置节点)的增减时能够以充分小的成本再次分布与键值相关的信息的方式,并不限于一致性哈希法。
(DSN的一例)
接着,对由本发明实施方式涉及的分布式RDB系统11生成的DSN的一例进行说明。图3A是表示DSN的一例的索引数据。DSN指的是通过将键值用作分布键的一致性哈希法,将NID分布存储于多个从节点15、17、19的索引,是在将键值作为输入来获得所对应的NID时被参照。
详细而言,DSN是注册请求涉及的键值和被分配给该键值的NID之间的对应关系所涉及的索引。该DSN针对注册请求涉及的键值所具有的每个数据型划分并进行存储。根据DSN的索引,能够将键值作为输入来获得所对应的NID。
DSN如图3A所示按以下的规则生成。
(1)在分布式数据库整体的范围内,对同一数据型的同一键值的集合赋予共同的NID。
(2)通过将键值用作分布键的一致性哈希法,将键值和NID的对分布存储于多个从节点15、17、19(DSN-CNN的值为a~c)。
(3)DSN的管理单位为分布式数据库。
(D-CRX的一例)
接着,对由本发明实施方式涉及的分布式RDB系统11生成的D-CRX的一例进行说明。图3B表示摘录了地域名、价格以及接受订货日这3个纵列时的D-CRX的一例。D-CRX指的是通过将NID的函数(包括NID自身)用作分布键的一致性哈希法而将NID分布存储于多个从节点15、17、19的索引,其在调查与键值搜索时对应的NID时、或者将NID逆变换成键值时被利用。
详细而言,D-CRX是注册请求涉及的键值和被分配给该键值的NID之间的一对一的对应关系所涉及的索引。该D-CRX针对注册请求涉及的键值所属的每个纵列划分并进行存储。根据D-CRX的索引,能够以NID作为输入来获得所对应的键值、以及以键值作为输入来获得所对应的NID。DSN与D-CRX之间的不同点在于,在DSN中将键值单向地变换成NID,而在D-CRX中双向地变换键值和NID。另外,根据D-CRX的索引,能够将键值的值范围(起始值和终止值)作为输入来获得所对应的NID集合(值范围搜索)。关于该值范围搜索,在后面叙述。
D-CRX如图3B所示按以下的规则生成。
(1)将分布式数据库内的同一表格的同一纵列作为管理单位,给予键值和NID之间的一对一的对应关系。
(2)块编号(D-CRX-BN)是NID除以块因子(D-CRX-BF)所得到的商。根据上述式,可以说D-CRX-BN为NID的函数。
(3)D-CRX-BF是常数,其取任意的正的整数(在本例中位“7”)的值。因此,D-CRX-BN取正的整数的值。
(4)通过将D-CRX-BN(NID的函数)作为分布键的一致性哈希法,将NID和键值的对(一对一对应)分布存储于多个从节点15、17、19(存储位置节点;D-CRX-CNN的值为a~c)。
(5)D-CRX的管理单位为纵列。
(D-CRS的一例)
接着,对由本发明实施方式涉及的分布式RDB系统11生成的D-CRS的一例进行说明。图3C表示摘录了地域名、价格、以及接受订货日这3个纵列时的D-CRS的一例。D-CRS指的是通过将RID的函数(包括RID自身)用作分布键的一致性哈希法而将NID分布存储于多个从节点15、17、19的索引,其在作成作为搜索结果的RID集合时、或者作成作为结合结果的元组时被使用。
详细而言,D-CRS是针对构成分布式数据库的表格内的每个纵列取唯一值的RID与NID之间的对应关系所涉及的索引。该D-CRS针对注册请求涉及的键值所属的每个纵列划分并进行存储。在D-CRS中成为下述数据构造,即:RID和NID之间的对应关系以一对一的方式进行描述,且在同一纵列内允许NID重复出现。根据D-CRS,能够将RID作为输入来获得所对应的NID。另外,能够将NID集合(标记为{NID})作为输入来获得所对应的RID集合(标记为{RID})。也就是说,通过将成为搜索对象的NID、和属于纵列的所有NID逐一对照下去的全扫描仅重复NID集合的源的数目,由此能够获得与NID集合对应的RID集合。
D-CRS如图3C所示按以下的规则生成。
(1)以分布式数据库内的同一纵列为单位来存储与RID对应的NID。将其称为列单位NID排列。
(2)块编号(D-CRS-BN)是RID除以块因子(D-CRS-BF)所得到的商。根据上述式,可以说D-CRS-BN为RID的函数。
(3)D-CRS-BF是常数,其取任意的正的整数(在本例中为“7”)的值。因此,D-CRS-BN取正的整数的值。
(4)通过将D-CRS-BN(RID的函数)作为分布键的一致性哈希法,将列单位NID排列分布存储于多个从节点15、17、19(D-CRS的数据的存储位置节点;D-CRS-CNN的值为a~c)。
(5)D-CRS的管理单位为纵列。
(D-RIX的一例)
接着,对由本发明实施方式涉及的分布式RDB系统11所生成的RIX的一例进行说明。图3D表示摘录了地域名、价格以及接受订货日这3个纵列时的D-RIX的一例。D-RIX指的是通过将NID的函数(包含NID自身)用作分布键的一致性哈希法而将NID分布存储于多个从节点15、17、19的索引,其在搜索表结合操作中的键值的情况下调查对应的RID时被使用。
详细而言,D-RIX是NID和RID集合之间的1对N的对应关系所涉及的索引。该D-RIX针对注册请求涉及的键值所属的每个纵列划分并进行存储。D-CRS和D-RIX之间的不同点在于,在D-CRS中在同一纵列内能引起NID重复出现,而在D-RIX中在同一纵列内不能引起NID重复出现。该不同点是由于下述原因而产生的,即:在D-CRS中将RID用作分布键,而在D-RIX中将NID用作分布键。根据D-RIX的索引,能够将NID作为输入来获得所对应的RID集合、以及将NID集合作为输入来获得所对应的RID集合。另外,利用D-RIX来进行表结合操作等数据操作,由此能够抑制数据在多个从节点15、17、19(存储位置节点;DSN-CNN的值为a~c)之间的移动、以及能够抑制表结合操作中进行搜索时的全扫描。关于其理由,在后面叙述。
D-RIX如图3D所示按以下的规则生成。
(1)将分布式数据库内的同一表格的同一纵列作为管理单位,给予NID和RID集合之间的对应关系。
(2)块编号(D-RIX-BN)是NID除以块因子(D-RIX-BF)所得到的商。根据上述式,可以说D-RIX-BN为NID的函数。
(3)D-RIX-BF是常数,其取任意的正的整数(在本例中为“7”)的值。因此,D-RIX-BN取正的整数的值。
(4)通过将D-RIX-BN(NID的函数)作为分布键的一致性哈希法,将NID和RID集合的对(1对N对应)分布存储于多个从节点15、17、19(存储位置节点;DSN-CNN的值为a~c)。
(5)D-RIX的管理单位为纵列。
(主节点和第一从节点的内部结构)
接着,对在本实施方式涉及的分布式RDB系统11中起到重要作用的主节点13和第一从节点15的内部结构进行说明。图4是表示主节点13和第一从节点15的内部结构的功能框图。
首先,对主节点13的内部结构进行说明。主节点13构成为具备:主接受部31、NID分配部33、索引生成部35、节点决定部37、具有请求发行部41和处理结果综合部43的分布总括管理部39、以及更新管理部45。
相当于注册请求接受部的主接受部31接受注册请求涉及的键值及其数据型的信息。键值注册请求实际上一般采用如下方式,即:针对多个纵列的每一纵列而以被关联有各自的键值及其数据型的信息的元组单位输入至主接受部31。其中,也存在键值注册请求以由多个元组的组构成的表格数据的形式被输入的情况。无论在哪种情况下,接受了元组单位的输入数据的主接受部31都将与元组所包含的多个纵列之中的任一个纵列相关联的键值(以下有时称为“处理对象键值”。)及其数据型的信息作为最小单位来逐次推进处理。因此,在本实施方式中,假设主接受部31接受了作为最小单位的一组处理对象键值及其数据型的信息来进行说明。
接受了元组单位的输入数据的主接受部31对属于其元组的所有键值赋予针对表格内的每个纵列取唯一的值的共同的RID。作为RID,与NID同样地优选取自然数且序数的值。其原因在于:通过增加RID的最新值这一极其简单的步骤,就能针对表格内的每个纵列赋予唯一的RID。
主接受部31接受自多个客户终端25a、25b、25c之中的任一个客户终端发行出的键值注册请求(包括其数据型的信息)、或者表结合操作等数据操作请求。另外,主接受部31接受从任一个从节点发送出来的后述的原有确认结果。主接受部31在产生键值注册请求的情况下将该请求转交给NID分配部33,而在产生数据操作请求的情况下将该请求转交给节点决定部37。
NID分配部33在产生键值注册请求的情况下,参照在主数据存储部13a中存储的DB管理数据之中的最新共享NID,对注册请求涉及的键值分配唯一的NID。另外,NID分配部33在主接受部31接受原有确认结果(表示在其存储位置节点中是否已经存在注册请求涉及的键值的信息)的情况下,基于该原有确认结果来生成表示是否应该更新最新共享NID所涉及的最新共享NID更新控制信号,并将其发送至更新管理部45。
索引生成部35在由NID分配部33对注册请求涉及的键值分配NID的情况下,基于注册请求涉及的键值、其键值所具有的数据型、被分配给其键值的NID以及由主节点13赋予的RID,分别生成DSN、D-CRX、D-CRS以及D-RIX的数据。在此,DSN的数据是指成为DSN的构成要素的至少最小单位的数据(一个键值和一个NID的对数据)。同样地,D-CRX的数据是指成为D-CRX的构成要素的至少最小单位的数据(一个键值和一个NID的对数据),D-CRS的数据是指成为D-CRS的构成要素的至少最小单位的数据(一个RID和一个NID的对数据),D-RIX的数据是指成为D-RIX的构成要素的至少最小单位的数据(一个NID和一群RID集合的对数据)。如此生成的4种索引数据例如在后述的节点决定时、或产生表结合操作等数据操作请求时等被参照。索引生成部35相当于DSN生成部、D-CRX生成部、D-CRS生成部以及D-RIX生成部。
节点决定部37在产生键值注册请求的情况下,通过将键值、NID的函数或者RID的函数中的任一个作为分布键的一致性哈希法,决定成为由索引生成部35生成的DSN、D-CRX、D-CRS以及D-RIX的数据的分布存储位置的从节点。节点决定部37相当于DSN存储节点决定部、D-CRX存储节点决定部、D-CRS存储节点决定部以及D-RIX存储节点决定部。
节点决定部37在产生表结合操作等数据操作请求的情况下,将处于主节点13的支配下的第一~第三从节点15、17、19的所有从节点决定为对数据操作请求进行分布处理的节点。响应于此,在第一~第三从节点15、17、19中并行地执行所给与的数据操作请求。关于第一~第三从节点15、17、19对数据操作请求进行分布处理的步骤,在后面详细叙述。
属于分布总括管理部39的请求发行部41在产生键值注册请求的情况下,对处于主节点13的支配下的第一~第三从节点15、17、19之中的、由节点决定部37决定出的从节点,分别发送DSN、D-CRX、D-CRS以及D-RIX的数据,并发行数据注册请求。另外,请求发行部41在产生数据操作请求的情况下,对第一~第三从节点15、17、19之中的、由节点决定部37决定出的节点,发行处理请求。请求发行部41相当于DSN注册请求发行部、D-CRX注册请求发行部、D-CRS注册请求发行部以及D-RIX注册请求发行部。
属于分布总括管理部39的处理结果综合部43接受被第一~第三从节点15、17、19的各个从节点分布处理后的数据操作结果,并综合这些处理结果。
更新管理部45根据从NID分配部33发送出的最新共享NID更新控制信号,控制DB管理数据之中的最新共享NID的更新。具体而言,更新管理部45进行如下控制,即:在接受到注册请求涉及的键值仍不存在于其存储位置节点的DSN存储部中这一情况的原有确认结果的情况下,将最新共享NID更新成下一共享NID。
接着,对第一从节点15的内部结构进行说明。第一从节点15构成为具备第一接受部51、原有判定部53、注册管理部55、第一分布处理部57以及第一响应部59。
第一接受部51接受从主节点13的请求发行部41发送出的DSN、D-CRX、D-CRS以及D-RIX的数据(以下称为“索引数据”)的注册请求、或者表结合操作等数据操作请求。第一接受部51在产生索引数据的注册请求的情况下将该请求转交给原有判定部53,而在产生数据操作请求的情况下,将该请求转交给第一分布处理部57。
原有判定部53在产生索引数据的注册请求的情况下,参照第一局部数据存储部15a的第一DSN,确认在第一DSN中是否已经存在与注册请求涉及的DSN的数据所包含的处理对象键值相同的值的数据,并将该原有确认结果发送至第一响应部59。另外,原有判定部53基于原有确认结果,将注册请求涉及的DSN的数据所包含的处理对象键值、和相对于该键值而言唯一的NID的组合所涉及的DSN的数据的注册指令发送至注册管理部55。
注册管理部55按照从原有判定部53发送出的注册指令,进行使注册请求涉及的DSN的数据追加存储于第一局部数据存储部15a(相当于DSN存储部)的注册管理。另外,注册管理部55按照从主节点13发送出的注册指令,进行使注册请求涉及的D-CRX、D-CRS以及D-RIX的数据存储于第一局部数据存储部15a(相当于D-CRX存储部、D-CRS存储部以及D-RIX存储部)的注册管理。由此,注册请求涉及的所有索引数据的注册完成。注册管理部55相当于DSN注册管理部、D-CRX注册管理部、D-CRS注册管理部以及D-RIX注册管理部。
相当于数据操作执行部的第一分布处理部57在产生与本节点关联的数据操作请求的情况下,适当参照在第一局部数据存储部15a中存储的第一DSN、第一D-CRX、第一D-CRS、第一D-RIX,对其他节点并行地执行请求涉及的分布处理。第一分布处理部57将所获得的分布处理结果转交给第一响应部59。
第一响应部59向主节点13的主接受部31响应从原有判定部53发送出的原有确认结果。在主节点13中,如前述那样,主接受部31将接受的原有确认结果转交给NID分配部33。NID分配部33基于该原有确认结果而生成最新共享NID更新控制信号,并将其发送至更新管理部45。更新管理部45根据从NID分配部33发送出的最新共享NID更新控制信号,对DB管理数据之中的最新共享NID的更新进行控制。另外,第一响应部59向主节点13的处理结果综合部43响应从第一分布处理部57发送出的分布处理结果。
(产生键值注册请求时的主节点13和从节点15、17、19之间的协调动作)
接着,对产生键值注册请求时的主节点13和从节点15、17、19之间的协调动作进行说明。首先,参照图5A,对产生DSN的数据的注册请求时的主节点13和从节点15、17、19之间的协调动作进行说明。图5A是表示产生基于键值注册请求的DSN的数据的注册请求时的主节点13和从节点15、17、19之间的协调动作的流程图。另外,键值注册请求如前述那样一般以元组为单位被输入至主接受部31,接受了元组单位的输入数据的主接受部31将与元组所包含的多个纵列之中的任一个纵列相关联的键值及其数据型的信息作为单位来推进处理。
在步骤S11中,主节点13的主接受部31接受自多个客户终端25a、25b、25c之中的任一个客户终端所发行的键值注册请求,并将该请求转交给NID分配部33。
在步骤S12中,接受了键值注册请求的NID分配部33参照在主数据存储部13a中存储的DB管理数据之中的最新共享NID,对注册请求涉及的键值分配与其相符的下一共享NID(例如,下一共享NID是将最新共享NID的值仅增加“1”后的值)。由NID分配部33对注册请求涉及的键值分配的下一共享NID的信息被发送至索引生成部35。
在步骤S13中,主节点13的索引生成部35基于注册请求涉及的键值、其键值所具有的数据型、和由NID分配部33对其键值分配的下一共享NID,生成DSN的数据。
在步骤S14中,主节点13的节点决定部37通过将键值作为分布键的一致性哈希法来决定成为由索引生成部35生成的DSN的数据的分布存储位置的从节点,并将该决定内容发送至分布总括管理部39。在此,假设具有CNN=x(其中,x为a~c中的任一个)的值的节点被决定为成为DSN的分布存储位置的从节点。另外,假设具有CNN=x的值的节点是第一从节点15,来进行以后的说明。
在步骤S15中,属于主节点13的分布总括管理部39的请求发行部41对处于主节点13的支配下的第一~第三从节点15、17、19之中的、由节点决定部37决定出的具有CNN=x的值的第一从节点15,发送由步骤S13生成的DSN的数据,并发行数据注册请求。
在此,虽然主节点13中的处理流程的说明处于中途,但是为了便于顺畅地说明主节点13与第一从节点15之间的协调动作,以下对具有CNN=x的值的第一从节点15中的处理内容进行说明。在步骤S21中,具有CNN=x的值的第一从节点15的第一接受部51接受从主节点13的请求发行部41发送出的DSN的数据注册请求,并将该请求转交给原有判定部53。
在步骤S22中,具有CNN=x的值的第一从节点15的原有判定部53参照第一局部数据存储部15a的第一DSN,确认在第一DSN中是否已经存在与注册请求涉及的DSN的数据所包含的处理对象键值相同的值的数据,并且基于该原有确认结果而在步骤S23中进行是否已经注册注册请求涉及的处理对象键值所涉及的原有判定。而且,原有判定部53基于原有判定结果,对注册管理部55发出注册请求涉及的处理对象键值、和相对于该键值而言唯一的NID之间的组合所涉及的DSN的数据的注册指令。
当步骤S23的原有判定的结果判定为已经注册注册请求涉及的处理对象键值的情况下,在步骤S24中注册管理部55不遵从从原有判定部53发送出的注册指令,而是原封不动地维持注册请求涉及的处理对象键值与已经注册的NID之间的对应关系所涉及的DSN的数据。由此,保证对同一键值分配唯一的NID。此时,注册管理部55取消DSN的数据的注册请求。其原因在于:注册请求涉及的处理对象键值和已经注册的NID之间的对应关系所涉及的DSN的数据已经注册,故无需追加注册DSN的数据。
另一方面,在步骤S23的原有判定的结果判定为注册请求涉及的处理对象键值为未注册的值的情况下,在步骤S25中注册管理部55根据从原有判定部53发送出的注册指令,将下一共享NID作为与注册请求涉及的处理对象键值相符的值而被分配的DSN的数据追加存储于第一局部数据存储部15a。在此,追加存储下一共享NID被分配的DSN的数据是指按照追加下一共享NID被分配的DSN的数据的方式进行存储,而非重写已经蓄积的DSN的数据。
在步骤S26中,第一从节点15的第一响应部59将在步骤S24或S25的处理后对注册请求涉及的处理对象键值实际分配的NID与原有确认结果一同返回给主节点13的主接受部31,并结束一连串的处理流程。
在此,返回到主节点13中的处理流程的说明。在步骤S16中,主节点13的主接受部31接受从第一从节点15发送出的原有确认结果、以及对注册请求涉及的处理对象键值实际分配的NID,并将该结果转交给NID分配部33。在步骤S17中,NID分配部33进行注册请求涉及的处理对象键值是否已经注册所涉及的原有判定。
当步骤S17的原有判定的结果判定为注册请求涉及的处理对象键值已经注册的情况下,在步骤S18中接受到注册请求涉及的处理对象键值已经存在于作为其存储位置的第一从节点15中这一情况的原有确认结果的NID分配部33生成禁止最新共享NID更新的控制信号,并将其发送至更新管理部45。更新管理部45根据从NID分配部33发送出的最新共享NID更新控制信号,禁止最新共享NID的更新。由此,在步骤S12中对注册请求涉及的处理对象键值分配的下一共享NID被取消,最新共享NID的值不会被更新而维持原值。
另一方面,当步骤S17的原有判定的结果判定为注册请求涉及的键值为未注册的值的情况下,在步骤S19中接受到注册请求涉及的处理对象键值仍不存在于作为其存储位置的第一从节点15中这一情况的原有确认结果的NID分配部33生成使最新共享NID更新的控制信号,并将其发送至更新管理部45。更新管理部45根据从NID分配部33发送出的最新共享NID更新控制信号,将最新共享NID的值更新成在步骤S12中对注册请求涉及的键值分配的下一共享NID的值。在该更新后,NID分配部33使处理流程进入到图5B的步骤S31。
接着,参照图5B,对在D SN的数据注册完成之后产生D-CRX/D-RIX的数据注册请求时的主节点13和从节点15、17、19之间的协调动作进行说明。图5B是表示产生基于键值注册请求的D-CRX/D-RIX的数据注册请求时的主节点13和从节点15、17、19之间的协调动作的流程图。
在步骤S31中,主节点13的NID分配部33参照对注册请求涉及的处理对象键值实际分配的NID,运算其NID的函数即块编号(D-CRX-BN和D-RIX-BN)。具体而言,通过运算分别求出“D-CRX-BN是NID除以D-CRX-BF所获得的商”、和“D-RIX-BN是NID除以D-RIX-BF所获得的商”。
在步骤S32中,主节点13的索引生成部35基于注册请求涉及的处理对象键值、对该键值实际分配的NID、和注册请求涉及的处理对象键值所属的纵列名,生成D-CRX的数据。
在步骤S33中,主节点13的索引生成部35基于对注册请求涉及的处理对象键值实际分配的NID、与该NID对应的RID集合、和注册请求涉及的处理对象键值所属的纵列名,生成D-RIX的数据。
在步骤S34中,主节点13的节点决定部37通过将在步骤S31中求出的NID的函数即块编号(D-CRX-BN和D-RIX-BN)作为分布键的一致性哈希法,决定成为由索引生成部35生成的D-CRX和D-RIX的数据的分布存储位置的从节点,并将该决定内容发送至分布总括管理部39。在此,假设具有CNN=y(其中,y为a~c中的任一个)的值的节点被决定为成为D-CRX和D-RIX的数据的分布存储位置的从节点。另外,假设具有CNN=y的值的节点为第一从节点15,来进行以后的说明。
在步骤S35中,属于主节点13的分布总括管理部39的请求发行部41对处于主节点13的支配下的第一~第三从节点15、17、19之中的、由节点决定部37决定出的具有CNN=y的值的第一从节点15,发送由步骤S32生成的D-CRX的数据、和由步骤S33生成的D-RIX的数据,并发行数据注册请求。在发行该数据注册请求后,主节点13的分布总括管理部39使处理流程进入到图5C的步骤S51。
在此,虽然主节点13中的处理流程的说明处于中途,但是为了便于顺畅地说明主节点13与第一从节点15之间的协调动作,以下对具有CNN=y的值的第一从节点15中的处理内容进行说明。在步骤S41中,具有CNN=y的值的第一从节点15的第一接受部51接受从主节点13的请求发行部41发送出的D-CRX和D-RIX的数据的注册请求,并经由原有判定部53而将该请求转交给注册管理部55。
在步骤S42~S43中,具有CNN=y的值的第一从节点15的注册管理部55根据从主节点13的请求发行部41发送出的注册请求,使D-CRX和D-RIX的数据针对每个纵列划分并分别存储至第一局部数据存储部15a。在步骤S42~S43中存储D-CRX和D-RIX的数据后,第一从节点15的注册管理部55使一连串的处理流程结束。
接着,参照图5C,对在D-CRX和D-RIX的数据注册完成之后产生D-CRS的数据注册请求时的主节点13和从节点15、17、19之间的协调动作进行说明。图5C是表示产生基于键值注册请求的D-CRS的数据注册请求时的主节点13和从节点15、17、19之间的协调动作的流程图。
在步骤S51中,主节点13的NID分配部33参照与对注册请求涉及的处理对象键值实际分配的NID对应的RID,运算其RID的函数即块编号(D-CRS-BN)。具体而言,通过运算来求出“D-CRS-BN是RID除以D-CRS-BF所得到的商”。
在步骤S52中,主节点13的索引生成部35基于对注册请求涉及的处理对象键值实际分配的NID、注册请求涉及的处理对象键值所属的RID、和注册请求涉及的处理对象键值所属的纵列名,生成D-CRS的数据。
在步骤S53中,主节点13的节点决定部37通过将在步骤S51中求出的RID的函数即块编号(D-CRS-BN)作为分布键的一致性哈希法,决定成为由索引生成部35生成的D-CRS的数据的分布存储位置的从节点,并将其决定内容发送至分布总括管理部39。在此,假设具有CNN=z(其中,z为a~c中的任一个)的值的节点被决定为成为D-CRS的分布存储位置的从节点。另外,假设具有CNN=z的值的节点为第一从节点15,来进行以后的说明。
在步骤S54中,属于主节点13的分布总括管理部39的请求发行部41对处于主节点13的支配下的第一~第三从节点15、17、19之中的、由节点决定部37决定出的具有CNN=z的值的第一从节点15,发送由步骤S52生成的D-CRS的数据,并发行数据注册请求。在发行该数据注册请求后,主节点13的分布总括管理部39使一连串的处理流程结束。
接着,在步骤S61中,具有CNN=z的值的第一从节点15的第一接受部51接受从主节点13的请求发行部41发送出的D-CRS的数据的注册请求,并经由原有判定部53而将该请求转交给注册管理部55。
在步骤S62中,具有CNN=z的值的第一从节点15的注册管理部55根据从主节点13的请求发行部41发送出的注册请求,使D-CRS的数据针对每个纵列划分并存储至第一局部数据存储部15a。在步骤S62中存储D-CRS的数据后,第一从节点15的注册管理部55使一连串的处理流程结束。
如上述那样注册的4种索引数据,在将由巨大量的数据构成的分布式RDB作为对象而第一~第三从节点15、17、19并行地分布执行表结合操作等处理时发挥其威力。尤其是,本实施方式涉及的分布式RDB系统11在经由例如WWW(World Wide Web)来提供分布式RDB服务时,即使以灵活应对急剧增大的需求为目标而增设系统内的节点的个数,并对分布存储于增设后的多个各节点中的数据执行了表结合操作等数据操作的情况下,也能够实现可使增设前后的作为系统整体的处理能力线性提高的线性横向扩展性(Linear Scale-Out)。以下,例示分布式查询处理来对通过导入4种索引数据如何能够使作为系统整体的处理能力有效地提高、且实现线性横向扩展性进行说明。
图6是表示分布式查询处理的流程的程序图。图6所示的分布式查询处理由步骤S71的分布式搜索处理、步骤S72的分布表结合处理、步骤S73的作为合计用的分布结果元组作成处理等构成。
步骤S71的分布式搜索处理、步骤S72的分布表结合处理和步骤S73的作为合计用的分布结果元组作成处理可以由第一~第三从节点15、17、19并行地执行。在使用上游侧阶段的结果来执行处理的步骤S72的程序中,上游侧程序(步骤S71)的处理在所有节点中完成,才能执行该处理。
在此,在说明分布式查询处理的流程之前先定义在说明中使用的词语的意思。
搜索式由搜索项、逻辑运算符、和对运算的优先次序进行控制的括号组成。由这些项的任意组合来构成搜索式。
搜索项由左边项、比较运算符、和右边项组成。左边项由列名或字面值(实际值)组成。右边项由列名或字面值(实际值)组成。比较运算符由等于“=”、不等于“≠”、大于“>”、大于等于“≥”、小于“<”、小于等于“≤”组成。
逻辑运算符由AND“&”、OR“|”、NOT“
”组成。AND进行积运算,OR进行和运算,NOT进行否定运算。括号由开括号“(”以及闭括号“)”组成。
在搜索中,在全部从节点中进行了将键值自身作为搜索关键的D-CRX的搜索之后,进行将通过该搜索所提取出的NID集合作为搜索关键的D-CRS的搜索,获取作为搜索结果的RID集合。在范围搜索(例如,将数值型的数据作为对象来提取属于由起始值和终止值组成的指定范围内的键值的搜索)中,在全部从节点中给予键值的指定范围并进行了D-CRX的搜索之后,进行将通过该搜索所提取出的NID集合作为搜索关键的D-CRS的搜索,获取作为搜索结果的RID集合。在部分匹配搜索(例如,将字符串型的数据作为对象来提取至少一部分具有指定字符串的键值的搜索)中,在全部从节点中给予键值的指定字符串并进行了D-CRX的搜索之后,进行将通过该搜索所提取出的NID集合作为搜索关键的D-CRS的搜索,获取作为搜索结果的RID集合。
表结合是指外部表和内部表的表结合操作。外部表是成为表结合的基准的表。内部表是成为相对于外部表的表结合的对方的表。外部表和内部表是通过结合纵列的值进行结合的。结合纵列指的是在外部表和内部表中共同存在的纵列,即具有经由该纵列而使外部表和内部表结合的作用的纵列。将外部表的结合纵列称为外部表外部关键纵列,将内部表的结合纵列称为内部表主关键纵列。通过重复表结合操作,从而能够结合多个表。
接着,参照图2A、图2B并举出具体例子,对图6所示的步骤S71的分布式搜索处理的内容进行说明。作为单一项中的完全匹配搜索的实施例1,举出将“地域名”为“关东”的键值提取为RID集合的例子。在该实施例1中,首先,接受到来自主节点13的搜索请求的第一~第三从节点15、17、19的分布处理部从搜索式中提取搜索项,求出搜索项集合{地域名=“关东”}。然后,将纵列名为“地域名”的D-CRX(CNN=a~c)作为对象,使用搜索项集合的源{地域名=“关东”},由第一~第三从节点15、17、19的分布处理部一并执行搜索。通过该搜索,从源{地域名=“关东”}中获得NID集合={6}。
在此,在以D-CRX(CNN=a~c)作为对象的一并搜索中,不需要进行全扫描对照,便能够在与搜索条件一致的键值被查到的时点停止搜索。其原因在于:D-CRX采用在某纵列内不允许键值重复的数据结构。因此,根据D-CRX的数据结构,能够有助于缩短搜索时间(以下相同)。
接着,第一~第三从节点15、17、19的分布处理部以纵列名为“地域名”的D-CRS(CNN=a~c)作为对象,以源为单位利用NID集合={6}进行全扫描对照,由此求出与该NID集合的值一致的RID集合。第一~第三从节点15、17、19的分布处理部一并进行该处理,由此获得RID集合={2,3,7,9}。RID集合={2,3,7,9}成为所求的答案。
在此,以D-CRS作为对象的NID集合的值搜索虽然需要进行全扫描对照,但是能够在比较短的时间内完成。其原因在于:根据前级的使用了D-CRX的搜索,将作为实际值的键值代替成NID(例如自然数),并利用所代替的NID的值来进行全扫描对照。在第一~第三从节点15、17、19的分布处理部中,由于NID由固定宽度的二进制整数值进行表现,因此与作为实际值的键值相比,在搜索或参照中效率格外良好。因此,根据D-CRX和D-CRS的组合所涉及的数据搜索,能够有助于缩短搜索时间(以下相同)。
作为在复数项(单一项的组合)中的完全匹配搜索,例如举出将“地域名”为“关东”的键值、或者“地域名”为“关西”的键值提取为RID集合的实施例2。在该实施例2中,分别利用各单一项中的搜索条件,根据实施例1的步骤来分别执行单一项中的完全匹配搜索,通过进行所获得的RID集合彼此的逻辑和(OR)运算,从而能够获得成为目的的RID集合。
作为单一项中的范围搜索的实施例3,举出提取“价格”为500000以上且800000以下的RID集合的例子。在该实施例3中,首先,接受到来自主节点13的搜索请求的第一~第三从节点15、17、19的分布处理部从搜索式中提取搜索项,求出搜索项集合{[价格≥500000,价格≤800000]}。然后,将纵列名为“价格”的D-CRX(CNN=a~c)作为对象,利用搜索项集合的源{[价格≥500000,价格≤800000]},由第一~第三从节点15、17、19的分布处理部一并执行搜索。通过该搜索,从第一源{[价格≥500000]}中获得NID集合={5,8,11,14,22,30}。从第二源{[价格800000]}中获得NID集合={2,8,11,17,22,30}。接着,第一~第三从节点15、17、19的分布处理部将每个第一以及第二源的NID集合适用于搜索式来进行NID集合彼此的逻辑积(AND)运算,求出作为搜索结果的NID集合={8,11,22,30}。然后,将纵列名为“价格”的D-CRS(CNN=a~c)作为对象,以源为单位利用NID集合={8,11,22,30}进行全扫描对照,由此求出与该NID集合的值一致的RID集合。
作为单一项中的部分匹配搜索的实施例4,举出将与“‘地域名’=LIKE‘%关%’”(根据SQL(structured query language)标记法,LIKE表示含糊搜索命令的关键字,%表示通配符符号。在该例子的情况下,搜索包括“地域名”为“关”的字符串在内的键值。)的搜索条件一致的键值提取为RID集合的例子。在该实施例4中,首先,接受到来自主节点13的搜索请求的第一~第三从节点15、17、19的分布处理部从搜索式中提取搜索项,求出搜索项集合{“地域名”=LIKE“%关%”}。然后,将纵列名为“地域名”的D-CRX(CNN=a~c)作为对象,利用搜索项集合的源{“地域名”=LIKE“%关%”},由第一~第三从节点15、17、19的分布处理部一并执行搜索。通过该搜索,从源{“地域名”=LIKE“%关%”}中获得NID集合={6,33}。
接着,第一~第三从节点15、17、19的分布处理部将纵列名为“地域名”的D-CRS(CNN=a~c)作为对象,以源为单位利用NID集合={6,33}进行全扫描对照,由此求出与该NID集合的值一致的RID集合。第一~第三从节点15、17、19的分布处理部一并进行该处理,由此获取RID集合={2,3,7,9,12,15}。该RID集合={2,3,7,9,12,15}成为所求的答案。
作为复数项(单一项的组合)中的部分匹配搜索,例如举出将包括“地域名”为“关”的字符串在内的键值、或者包括“地域名”为“东”的字符串在内的键值提取为RID集合的实施例5。在该实施例5中,分别利用各单一项中的搜索条件,通过实施例4的步骤来分别执行单一项中的部分匹配搜索,通过进行所获得的RID集合彼此的逻辑和(OR)运算,从而能够获得作为搜索结果的RID集合。
接着,参照图2A、图2B、图7以及图8并举出具体例子,对图6所示的步骤S72的分布表结合处理的步骤进行说明。图7是表示被分布存储于多个从节点15、17、19的按地域分类的顾客数的内部表的图。图8是表示图7所示的内部表的D-RIX的一例的图。在实施例6中,在第一~第三从节点15、17、19的分布处理部中,参照结合纵列的D-RIX来求出外部表和内部表的结合结果。在实施例6中,表示被分布存储于多个从节点15、17、19的销售管理表(事务处理)的图2A、图2B作为外部表。表示被分布存储于多个从节点15、17、19的按地域分类的顾客数的图7作为内部表。在实施例6中,结合纵列为“地域名”。
在该实施例6中,首先,接受到来自主节点13的表结合操作请求的第一~第三从节点15、17、19的分布处理部从外部表的D-RIX(以下省略为“OTFK-D-RIX”)之中分别获取外部表外部关键纵列的NID(以下省略为“OTFK-NID”)集合。具体而言,例如在第一从节点(CNN=a)15中,从图3D所示的“地域名”的纵列之中获取OTFK-NID集合{2,6,25}。
接着,第一~第三从节点15、17、19的分布处理部将OTFK-NID集合的源(NID)用作搜索条件,分别搜索内部表主关键纵列的D-RIX(以下省略为“ITPK-D-RIX”)。具体而言,例如在第一从节点(CNN=a)15中,将OTFK-NID集合的源{2,6,25}用作搜索条件,从图8所示的“地域名”的纵列之中查到与OTFK-NID集合的源{2,6,25}一致的内部表主关键纵列的NID(以下省略为“ITPK-NID”)集合。通过该搜索,获得ITPK-NID集合{2,6,25}。
在ITPK-NID集合的搜索成功的情况下,第一~第三从节点15、17、19的分布处理部从OTFK-D-RIX的目标纵列(外部表外部关键纵列)之中分别获取与OTFK-NID集合对应的外部表RID(以下省略为“OTRID”)集合。具体而言,例如在第一从节点(CNN=a)15中,从图3D所示的“地域名”的纵列之中获取与OTFK-NID集合{2,6,25}对应的OTRID集合{1,2,3,5,7,8,9,10,14}。
接着,第一~第三从节点15、17、19的分布处理部从ITPK-D-RIX的目标纵列(内部表主关键纵列)之中分别获取与ITPK-NID集合对应的内部表RID(以下省略为“ITRID”)集合。具体而言,例如在第一从节点(CNN=a)15中,从图8所示的“地域名”的纵列之中获取与ITPK-NID集合{2,6,25}对应的ITRID集合{1,2,7}。
然后,第一~第三从节点15、17、19的分布处理部分别作成与外部表RID对应的内部表RID的对照表(以下省略为“REF-OTRID-ITRID”)。REF-OTRID-ITRID起到将彼此相同的OTFK-NID和ITPK-NID夹在中间而将外部表RID和与之对应的内部表RID建立连结的作用。由此,获得图9所示的RID对照表。
在结合条件存在多个的情况下,第一~第三从节点15、17、19的分布处理部针对多个结合条件的每一个条件,按照实施例6的步骤分别作成REF-OTRID-ITRID,通过对所得到的REF-OTRID-ITRID彼此实施逻辑运算,从而能够针对多个从节点15、17、19的每一个从节点获得作为结合结果的REF-OTRID-ITRID(RID对照表)。
实施例6涉及的作为结合结果的RID对照表由针对多个从节点15、17、19的每一个从节点被分布存储的REF-OTRID-ITRID表现。作为该结合结果的RID对照表的数据结构对RDB中的数据的存储效率以及处理效率带来极大影响。其原因在于:不用以实际值作为基准来作成易变得巨大的结合表,就能够起到与结合表等同的功能。在第一~第三从节点15、17、19的分布处理部中,以外部表作为基准按序追溯REF-OTRID-ITRID,由此能够将外部表中的目标纵列(外部表外部关键纵列)的RID用作指针,有效地参照内部表中的目标纵列(内部表主关键纵列)的RID。当能够获得属于目标纵列(外部表外部关键纵列或内部表主关键纵列)的实际表(外部表或内部表)的RID时,将其RID作为指针来参照D-CRS,从而能够获取所对应的NID。当能够获得NID时,将其NID作为指针来参照D-CRX,从而能够获取所对应的键值。
搜索结果的数据结构被表现为外部表的RID集合。与之相对,结合结果的数据结构被表现为以外部表为基准的REF-OTRID-ITRID(RID对照表)的链锁。它们的共同点在于,两者均具有外部表的RID集合。因此,通过在搜索结果和结合结果的各自的外部表的RID集合彼此之间进行逻辑运算,从而能够有效地实现搜索结果和结合结果的组合所涉及的逻辑运算。
根据实施例6,能够将表结合操作用的复杂运算置换成简单的集合运算。因此,能够实现运算处理时间的大幅缩短。另外,根据实施例6,在进行表结合操作时,无需在外部表的结合纵列与内部表的结合纵列之间对键值进行核对。这是基于下述等情况而实现的,即:通过采用DSN来保证对同一键值分配同一NID、以及将共同的NID夹在中间而存在将外部表RID和与之对应的内部表RID建立连结的RID对照表等。
另外,在实施例6中,与同一键值相关的信息(NID)按照汇集到同一从节点的方式被有意地分布存储。因此,与在多个从节点之间具有同一值的键值被随机地分布存储的现有例相对照地,例如在某从节点执行联合运算等数据操作的情况下,完全不会发生用于相互参照具有同一值的键值的从节点间的通信。因此,根据实施例6,能够抑制作为系统整体的处理的开销,故能够有效地提高作为分布式RDB系统11整体的处理能力。
简而言之,根据实施例6,在经由例如WWW(World Wide Web)来提供分布式RDB服务时,即使以灵活应对急剧增大的需求为目标而增设系统内的从节点的个数,并对分布存储于增设后的多个各从节点中的数据执行了表结合操作等数据操作的情况下,也能够实现可使增设前后的作为系统整体的处理能力线性提高的线性横向扩展性。
接着,关于图6所示的步骤S73的作为合计用的分布结果元组作成处理的概要,划分成没有表结合操作的情况和有表结合操作的情况来进行说明。步骤S73的处理在第一~第三从节点15、17、19的每一个从节点中被并行地执行。在没有表结合操作的情况下的作为合计用的分布结果元组作成处理中,第一~第三从节点15、17、19的分布处理部从作为各自的搜索结果的RID集合之中分别获取成为其RID集合的源的RID。
接着,第一~第三从节点15、17、19的分布处理部基于所获取到的RID,确定由哪个节点保存与所获取到的RID对应的NID的数据。具体而言,第一~第三从节点15、17、19的分布处理部通过进行以下的计算,来确定数据的存储位置节点编号D-CRS-CNN。即、分布处理部基于RID来决定D-CRS的块编号D-CRS-BN。然后,利用该决定出的D-CRS-BN来进行基于一致性哈希法的哈希运算,由此决定D-CRS-CNN。在此,在本节点以外的节点保存与所获取到的RID对应的NID的数据的情况下,本节点从本节点以外的节点之中获取其数据。接下来,本节点将所获取到的RID用作指针,参照构成元组的目标纵列的D-CRS来获取NID。
接着,第一~第三从节点15、17、19的分布处理部基于所获取到的NID,确定由哪个节点保存与所获取到的NID对应的键值的数据。具体而言,第一~第三从节点15、17、19的分布处理部通过进行以下的计算,由此确定数据的存储位置节点编号D-CRX-CNN。即、分布处理部基于NID来决定D-CRX的块编号D-CRX-BN。进而,利用该决定出的D-CRX-BN来进行基于一致性哈希法的哈希运算,由此决定D-CRX-CNN。在此,在本节点以外的节点保存与所获取到的NID对应的键值的数据的情况下,本节点从本节点以外的节点之中获取其数据。接下来,本节点将所获取到的NID用作指针,参照构成元组的目标纵列的D-CRX,获取作为实际值的键值。
接着,在有表结合操作的情况下的用作合计用的分布结果元组作成处理中,第一~第三从节点15、17、19的分布处理部从作为各自的搜索结果的RID集合之中分别获取外部表的RID。
接着,第一~第三从节点15、17、19的分布处理部基于所获取到的外部表的RID,确定由哪个节点保存与所获取到的外部表的RID对应的NID的数据。具体而言,第一~第三从节点15、17、19的分布处理部通过进行以下的计算,由此确定数据的存储位置节点编号D-CRS-CNN。即、分布处理部基于外部表的RID来决定D-CRS的块编号D-CRS-BN。然后,利用该决定出的D-CRS-BN来进行基于一致性哈希法的哈希运算,由此决定D-CRS-CNN。在此,在本节点以外的节点保存与所获取到的外部表的RID对应的NID的数据的情况下,本节点从本节点以外的节点之中获取其数据。接下来,本节点将所获取到的外部表的RID用作指针,参照REF-OTRID-ITRID的链锁,从构成元组的目标纵列的REF-OTRID-ITRID之中获取成为目标的内部表的RID。
接着,第一~第三从节点15、17、19的分布处理部基于所获取到的内部表的RID,确定由哪个节点来保存与所获取到的内部表的RID对应的NID的数据。具体而言,第一~第三从节点15、17、19的分布处理部通过进行以下的计算,由此确定数据的存储位置节点编号D-CRS-CNN。即、分布处理部基于内部表的RID来决定D-CRS的块编号D-CRS-BN。然后,利用该决定出的D-CRS-BN来进行基于一致性哈希法的哈希运算,由此决定D-CRS-CNN。在此,在本节点以外的节点保存与所获取到的内部表的RID对应的NID的数据的情况下,本节点从本节点以外的节点之中获取其数据。接下来,本节点将所获取到的内部表的RID用作指针,参照构成元组的目标纵列的D-CRS来获取NID。
接着,第一~第三从节点15、17、19的分布处理部基于所获取到的NID,确定由哪个节点保存与所获取到的NID对应的键值的数据。具体而言,第一~第三从节点15、17、19的分布处理部通过进行以下的计算,由此确定数据的存储位置节点编号D-CRX-CNN。即、分布处理部基于NID来决定D-CRX的块编号D-CRX-BN。进而,利用该决定出的D-CRX-BN来进行基于一致性哈希法的哈希运算,由此决定D-CRX-CNN。在此,在本节点以外的节点保存与所获取到的NID对应的键值的数据的情况下,本节点从本节点以外的节点之中获取其数据。接下来,本节点将所获取到的NID用作指针,参照构成元组的目标纵列的D-CRX来获取作为实际值的键值。
另外,在本实施方式中,对第一~第三从节点15、17、19的分布处理部通过自身进行基于一致性哈希法的哈希运算由此决定D-CRX-CNN或D-CRS-CNN的例子进行了说明,但是本发明并不限定于此。例如,也可以由主节点13将D-CRX-CNN或D-CRS-CNN作为主数据13a进行保存,第一~第三从节点15、17、19的分布处理部询问主节点13。其中,较之询问主节点13,各从节点自身进行运算更为有效,所以优选。
如以上说明的那样,主节点13的索引生成部35在分别作成了用于分布存储于第一~第三从节点15、17、19的索引数据(DSN、D-CRX、D-CRS、D-RIX)之后,将所作成的索引数据一起发送至由节点决定部37所决定的决定节点,并在各自的决定节点上一起处理索引数据。
在通过一致性哈希法来决定索引数据的存储位置节点时,在DSN中将键值用作分布键,在D-CRX和D-RIX中将NID的函数用作分布键,在D-CRS中将RID的函数用作分布键。由此,例如在某从节点执行联合运算等数据操作的情况下,由于完全不会发生用于相互参照具有同一值的键值的从节点之间的通信,因此能够实现索引数据的处理的效率化。
另外,由于利用DSN将NID和键值限制为一对一对应,因此在作为有意义的值而键值成为必要之前的处理中,优选取代键值而采用NID(取自然数且序数的值)。由此,能够将所有运算返回到数值运算。由于在计算机内NID由固定宽度的二进制整数值进行表现,因此与作为实际值的键值相比,在搜索或参照的情况下效率良好。因此,能够有助于缩短运算处理时间。
以上所说明的实施方式示出了本发明的具体化的例子。因此,不能由此将本发明的技术范围限定性地进行解释。本发明在不脱离其宗旨或其主要特征的情况下能够以各种方式进行实施。
例如,在本实施方式中,作为多个从节点而例示第一~第三从节点15、17、19进行了说明,但是本发明并不限定于该例子。关于从节点的数目,与成为处理对象的数据量的增减相匹配地调整成适当的数量即可。
另外,在本实施方式中,作为主节点而例示一个主节点13进行了说明,但是本发明并不限定于该例子。在谋求负载分布或提高耐障碍性的目的下,也可设置主节点的复制。也可设置复制,对于从节点也是相同的。
另外,在本实施方式中,将D-RIX的索引数据与DSN、D-CRX、D-CRS并列进行了说明,但是在本发明中D-RIX并非是必须的数据结构。其原因在于:D-RIX虽然能够实现表结合操作时的处理的效率化,但是即便没有该D-RIX,通过进行参照D-CRS的全扫描对照,也能够代替其功能。
另外,在上述实施方式中,对将索引生成部35、节点决定部37以及更新管理部45设于主节点13中的例子进行了说明,但是本发明并不限定于此。例如,也可以在从节点15、17、19中设置这些的各功能构成。在注册大量的数据时,通过由多个从节点15、17、19并行地执行与索引生成部35、节点决定部37以及更新管理部45相关的处理,从而能够提高处理的效率。
(产业上的可利用性)
本发明能够利用于具备多个从节点和主节点的分布式数据库系统。