首页> 中国专利> 分布式数据库中子表分裂的方法、子表节点和系统

分布式数据库中子表分裂的方法、子表节点和系统

摘要

本发明涉及一种分布式数据库中子表分裂的方法、子表节点和系统,根据预设条件,设置第一子表,第一子表是指为存储新的键-值类型的数据而预留的空表;该方法包括:当新的键-值类型的数据需要存储到第一子表中时,接收用户输入的子表分裂命令;根据子表分裂命令,将状态表中第一子表的状态标识更新为不再提供读写服务,并将第一子表分裂为至少两个第二子表,更新状态表中第二子表的状态标识为可提供读写服务;指示将第二子表的存储位置信息记录在元数据表中。因此,通过在用户表中预留一个当前数据存储时保持为空的子表,当需要将数据存储到该子表中时,先将该子表进行分裂,分裂完成后再存入数据,实现了用户表中子表的快速分裂。

著录项

  • 公开/公告号CN105354315A

    专利类型发明专利

  • 公开/公告日2016-02-24

    原文格式PDF

  • 申请/专利权人 华为技术有限公司;

    申请/专利号CN201510767508.9

  • 发明设计人 毕杰山;房浩;钟超强;郭益君;

    申请日2015-11-11

  • 分类号G06F17/30(20060101);

  • 代理机构11309 北京亿腾知识产权代理事务所;

  • 代理人陈霁

  • 地址 518129 广东省深圳市龙岗区坂田华为总部办公楼

  • 入库时间 2023-12-18 14:21:19

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-10-30

    授权

    授权

  • 2016-03-23

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20151111

    实质审查的生效

  • 2016-02-24

    公开

    公开

说明书

技术领域

本发明涉及数据库领域,尤其涉及一种分布式数据库中子表分裂方法、子表节点和系统。

背景技术

在大多数分布式数据库中,通常采用KeyValue类型的存储方式,即将用户需要存储的数据存放在Value部分,构建与Value对应的Key,当用户需要查找Value时,通过Key索引查找对应的Value。在数据存储时,是按照Key的字典顺序自然排序的。

数据存储在用户创建的相应用户表(Table)。一个Table中可以存储大量的数据,为了方便分布式管理和维护,可以按照记录的Key值的字典顺序切割生成一个或多个子表(Region),每个Region是一个Key区间数据的集合,也可以说是连续行数据的集合。每个KeyValue所对应的Key只包括在一个Region区间。例如图1所示,图1为一个用户表中子表的示意图,其中,图1中Region-1中的Key-A代表着在字典顺序上一个无穷小的值,Region-M中的Key-Y代表着在字典顺序上一个无穷大的值。

目前,子表的分裂分为两种形式:第一,在建表初期,预设定分裂点(SplitPoints),子表会按照预设定的分裂点生成新的子表。例如:建表时建立Region[Key-A,Key-Y),预设定的分裂点为{B,C,……X},Region[Key-A,Key-Y)会按照预设定的分裂点自动生成多个子表:Region-1[Key-A,Key-B),Region2[Key-B,Key-C),Region3[Key-C,Key-D),……RegionM[Key-X,Key-Y),如图2所示。第二,当子表中存储的数据达到一定内存时,会自动分为两个子表,或者通过用户手动触发子表分裂。例如:如图3所示,图3为一个子表分裂为两个子表的示意图,分别将Region[,C),Region[C,E),Region[E,G),……,Region[X,)分裂为两个子表,依次分裂为Region[,B)、Region[B,C),Region[C,D)、Region[D,E),Region[E,F)、Region[F,G),……,Region[X,Y)、Region[Y,Z)。当一个用户表中包括多个子表时,也可以按照第二种分裂方式将子表进行分裂,以提高读写数据的性能。

但是,如果在建表初期预设定的分裂点不合理,例如在建表时确定的分裂点为{a,b,c,d,e,f},基于这些分裂点的子表为(-∞,a),[a,b),[b,c),[c,d),[d,e),[e,f),[f,+∞)。运行一段时间之后,发现原来的分裂点是不合理的,更加合理的分裂点应该为{g,h,i,j,k,l,m},而原来的子表中又已经存在用户数据了,此时对子表进行分裂,读取一个文件中的数据,然后存放到两个或多个文件中,子表分裂速度慢,且读写数据的性能较差,如果将子表分裂的越多,读写数据的性能会越差,且分裂后的子表也依然会造成数据分布不均匀的问题。

发明内容

本发明实施例提供一种分布式数据库中子表分裂的方法、子表节点和系统,通过在用户表中预留一个子表,该子表在当前数据存储时保持为空子表。当需要将数据存储到该子表中时,将该子表进行分裂,以实现用户表中子表的快速多点分裂,提升用户表的读写性能。

一方面,本申请的实施例提供一种分布式数据库中子表分裂的方法,当数据按照键-值类型存储的方式进行存储时,根据预设条件,例如业务类型,预估计当前业务类型存储数据的Key值范围,设置空子表,该空子表为存储新的键-值类型的数据预留的空表,即当前存储的数据不会存储在该空表中。该方法包括:当以键-值类型存储的数据需要存储到空子表中时,接收子表分裂命令,该子表分裂命令可以为用户调用的一个接口或者一个命令,该子表分裂命令中包括空子表分裂的分裂点信息。根据子表分裂命令将状态表中记录的空子表的状态标识为不再提供读写服务,也可以理解为不支持提供读写服务。根据空子表分裂点的信息,将空子表分裂为两个或者两个以上的新子表,并将状态表中记录的新生成的子表的状态标识为可提供读写服务,可理解为支持提供读写服务。并指示将新生成的子表存储的子表节点(或存储节点)的位置信息记录在元数据表中,以便于用户根据元数据表中记录的新生成子表所在的子表节点的位置信息,获取存储在新生成子表中的数据。

基于上述方案,通过在用户表中预留一个子表,该子表在当前数据存储时保持为空子表。当需要将数据存储到该子表中时,将该子表进行分裂,分裂完成之后再存入数据,实现了用户表中子表的快速多点分裂,提升了用户表的读写性能。

在一个可能的设计中,当接收到子表分裂命令时,向共享状态机发送一个可以表征空子表开始分裂的信息。当共享状态机接收到该信息时,将记录的空子表的状态标识为空子表开始分裂,以明确该子表的服务状态,避免向该空子表中写入数据,造成数据丢失。

在另一个可能的设计中,当子表分裂完成之后,向共享状态机发送可以表征空子表完成分裂的信息。当共享状态机接收到该信息时,将记录的空子表的状态标识为空子表分裂完成,以明确该空子表的状态,以禁止向该空子表中写入数据,造成数据丢失。

在又一个可能的设计中,当空子表分裂为至少两个新子表时,指示更新元数据表中空子表的状态为不支持提供可读写服务,便于通过查询元数据表获取该空子表的服务状态,以用于在后续存储空间清理中,删除该空子表的信息。

另一方面,本申请的实施例提供一种子表节点,当数据按照键-值类型的存储方式进行数据存储时,根据预设条件,例如存储数据的业务类型,预估计存储数据的Key值的范围,设置空子表,即当前存储的数据不会存储在该空子表中。该子表节点包括接收单元、更新单元、分裂单元和记录单元。当新的键-值类型的数据需要存储在空子表中时,接收单元接收子表分裂命令,该子表分裂命令可以为用户调用的一个接口或者一个命令,该命令包括空子表分裂点信息。更新单元根据子表分裂命令将状态表中的空子表的状态标识为不再提供读写服务,即不支持提供读写服务。分裂单元根据分裂点信息,将空子表分裂成两个或者两个以上的新子表,并将新子表的状态标识为可提供读写服务,可理解为支持提供读写服务。指示记录单元将新子表所在的子表节点(或存储节点)的位置信息记录在元数据表中,以便于通过查询元数据表中记录的新子表的位置信息,获取存储在新子表中的数据。

基于上述方案,通过在用户表中预留一个子表,该子表在当前数据存储时保持为空子表。当需要将数据存储到该子表中时,将该子表进行分裂,分裂完成之后再存入数据,实现了用户表中子表的快速多点分裂,提升了用户表的读写性能。

在一个可能的设计中,该表节点还包括发送单元,用于向共享状态机发送表征空子表开始分裂的信息。当共享状态机接收到该信息时,将空子表的状态标识为开始分裂,以避免向该空子表中写入数据,造成数据丢失。

在另一个可能的设计中,当子表分裂完成之后,发送单元向共享状态机发送可以表征空子表完成分裂的信息。当共享状态机接收到该信息时,将记录的空子表的状态标识为空子表分裂完成,以明确该空子表的状态,以禁止向该空子表中写入数据,造成数据丢失。

在又一个可能的设计中,指示更新单元将元数据表中的空子表的状态标识为不支持提供读写服务,便于通过查询元数据表获取该空子表的服务状态,以用于在后续存储空间清理中,删除该空子表的信息。

再一方面,本申请实施例提供一种系统,该系统包括多个管理节点和共享状态机,多个管理节点可以管理一个或者多个另一方面中的子表节点,以用于数据按照键-值类型的存储方式存储时,根据预设条件,设置第一子表,所述第一子表是指为存储新的键-值类型的数据而预留的空表;当所述新的键-值类型的数据需要存储到所述第一子表时,通过所述至少一个子表节点、所述多个管理节点和所述共享状态机完成对所述第一子表的分裂。

本申请提供的分布式数据库中子表分裂的方法、子表节点和系统,通过在用户表中预留一个子表,该子表在当前数据存储时保持为空子表。当需要将数据存储到该子表中时,将该子表进行分裂,分裂完成之后再存入数据,实现了用户表中子表的快速多点分裂,提升了用户表的读写性能。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为一个用户表中子表的示意图;

图2为一个用户表中一个子表分裂为多个子表的分裂示意图;

图3为一个用户表中每个子表分裂为两个子表的分裂示意图;

图4为本发明实施例提供的分布式数据库;

图5为本发明实施例提供的一种子表节点的结构示意图;

图6为本发明实施例提供的一种分布式数据库中子表分裂方法的流程图;

图7为元数据表的结构示意图;

图8为本发明另一实施例提供的一种分布式数据库中子表分裂方法的流程图;

图9为本发明实施例提供的一种子表节点的结构示意图;

图10为本发明另一实施例提供的一种子表节点的结构示意图。

具体实施方式

本发明实施例应用于分布式数据库中,通常以键-值(KeyValue)类型的存储方式进行数据存储。

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都应属于本发明保护的范围。

如图4所示,图4为本发明实施例提供的分布式数据库,也可以称作“系统”。该分布式数据库100可以包括多个管理节点110和共享状态机120,每个管理节点管理一个或多个子表节点130(RegionServer),每个子表节点通常为一个物理服务器。每个子表节点中包括至少一个子表和一个状态表。每个子表用于存储数据;状态表用于记录各个子表的状态,例如:子表处于支持提供读写服务的状态,或者子表处于不支持提供读写服务的状态。共享状态机为全集群范围内的一个管理节点,可以用来记录各个子表的状态,以用于分布式数据库中的其他管理节点知道各个子表的状态,例如:子表处于分裂状态或者子表处于分裂完成状态。

在用户建立用户表,划分子表时,先预留一个第一子表,在当前数据存储中,数据不会存储到该第一子表中。该第一子表的预留可以根据用户需要存储的数据类型来预留,例如,当目前存储的数据都为“A类型”数据时,预估计该类型数据存储的Key值范围,为将来可能存储的其他类型的数据,例如“B类型”、“C类型”,或者其他类型的数据预留一个空的子表。当需要存储“B类型”、“C类型”,或者其他类型的数据时,将该空子表分裂为需要个数的子表,以提高用户表数据的读写性能。

图5为本发明实施例提供的一种子表节点的结构示意图,如图5所示,该子表节点为如图4所示的子表节点130,该子表节点130包括:通信接口131、存储器132,处理器133和总线134,该通信接口131、存储器132,处理器133通过总线134连接,并完成相互之间的通信。通信接口131用于接收外部设备输入的信号或者向外部设备发送相应的指令。存储器132用来存储指令和数据。处理器133用于调用存储器中的指令,并执行相应的操作。

在本发明实施例中,处理器133可以是中央处理单元(CentralProcessingUnit,CPU),该处理器133还可以是其他通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

总线134除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线134。

存储器132可以包括只读存储器和随机存取存储器,并向处理器133提供指令和数据。存储器的一部分还可以包括非易失性随机存取存储器。例如,存储器还可以存储设备类型的信息。

如图5所示,该子表节点130还可以包括输入设备135和输出设备136,例如:键盘和显示器。输入设备135用于向该子表节点输入相关的指令或信息。输出设备136用于向外部设备输出相应的信息。

图6为本发明实施例提供的一种分布式数据库中子表分裂方法的流程图。如图6所示,该子表分裂的方法200的执行主体为图4或图5中的子表节点130。该方法200包括:

S210,当以键-值类型存储的新数据需要存储到第一子表中时,接收子表分裂命令,子表分裂命令包括第一子表的分裂点信息;

S220,根据子表分裂命令,更新状态表中第一子表的状态标识为第一标识,第一标识用于表示第一子表不再提供读写服务;

S230,根据子表分裂命令中记录的分裂点信息,将第一子表分裂为至少两个第二子表,并将状态表中第二子表的状态标识记录为第二标识,第二标识用于表示第二子表可提供读写服务;

S240,指示将至少两个第二子表所在的子表节点的位置信息记录在元数据表中,以便于根据元数据表找到用于存储新数据的第二子表所在的子表节点。

具体的,在S210中,第一子表为用户划分子表时,预留下来的一个空子表。用户在预留该空子表时,可以根据当前存储数据类型,预估计数据存储中Key值的范围,以保证当前存储的数据不会落在该空子表中。

当需要将数据存储到该空子表中时,子表节点根据用户调用的一个接口或者一个命令,该命令为子表分裂命令,触发空子表按照预设定的多个分裂点(SplitPoints)分裂为多个子表。其中,子表分裂命令中包括空子表分裂的信息。分裂点是按照数据存储的Key值点来分的。例如:子表的Key值范围为从1至9,则可以设置分裂点为3和6。

在S220中,子表节点中可以包括状态表,状态表用于记录子表节点中各个子表的状态,例如:子表处于支持提供读写服务状态或者子表处于不支持提供读写服务状态。子表节点根据空子表的分裂信息,将状态表中空子表的状态标识修改为不支持提供读写服务的标识,例如表1所示,表1为本发明实施例提供的一种状态表的结构示意。

表1

子表 状态标识 子表1 不支持提供读写服务 子表2 支持提供读写服务 子表3 支持提供读写服务

应理解,在本发明实施例中,表1的内容只是为了详细的描述技术方案,表1中的状态标识还可以通过其他的逻辑表示方式进行标识,例如,通过“0”表示不支持提供读写服务,通过“1”表示支持提供读写服务,在本发明实施例中对此不作任何限制。

还需理解,在本发明实施例中,子表节点中记录各子表的状态标识是通过状态表的形式体现的,在本发明实施例中也可以通过其他的逻辑关系实现子表节点中各子表的状态信息记录,在本发明实施例中对此不作限制。

在本发明实施例中,子表节点将空子表的状态标识修改为不支持提供读写服务,以便于子表节点内部明确该空子表的服务状态,同时避免了在空子表分裂过程中,向该空子表写入数据造成的数据丢失的问题。

在S230中,第二子表为子表节点根据空子表分裂点信息和预设定的分裂点,将子表分裂成的新的子表。通常用户会预设定多个分裂点,将空子表分裂为两个或者两个以上的新的子表,以用于提高数据的读写性能。

在状态表中记录新生成的子表,将新生成的子表的状态标识为支持提供读写服务的标识,以明确知道该新生成的多个子表处于哪种服务状态,方便将数据存储到新生成的子表中,以提高数据的读写性能。

在S240中,元数据表(MetaTable,META)为一类特殊的表,该表保存了所有用户表的子表的路由信息,即每个子表位于哪个子表节点的相关信息,例如图7所示,图7为元数据表的结构示意图。

子表节点指示将新生成的子表所在的子表节点的位置信息记录在元数据表中。以便于用户可以通过元数据表找到存储新数据的各子表的位置。当元数据表存储在该方法的执行主体的子表节点时,即元数据表存储在当前执行子表分裂的子表节点时,子表节点直接更新元数据表;当元数据表存储与其他子表节点时,需要该方法执行主体的子表节点指示其他存储节点(即其他子表节点)更新元数据表。

本发明实施例提供的分布式数据库中子表分裂的方法,通过预先设定一个空子表,在需要将数据存储到该空子表时,根据预设的多个分裂点,先将空子表分裂为至少两个子表,再向新生成的至少两个子表中存储数据,实现子表的快速分裂,以提高数据读写性能。

可选地,作为本发明另一实施例,如图8所示,当接收到用户输入的子表分裂命令时,方法200还包括:

S250,向共享状态机发送第一信息,第一信息表征第一子表开始分裂,以使共享状态机根据第一信息,将记录的第一子表的状态标识更新为第三标识,第三标识用于表示第一子表开始分裂。

具体的,管理节点为管理该子表节点的一个节点,一个管理节点可以管理一个或多个子表节点,该管理节点为图4中的管理节点110。该共享状态机为图4中的共享状态机120,共享状态机记录了各个子表的状态信息,例如子表处于开始分裂状态或是处于分裂完成状态。共享状态机记录各子表的状态信息可以通过状态表的形式体现,例如表2所示,表2为本发明实施例提供的共享状态机中状态表的结构示意。

表2

子表 状态标识 子表1 Spliting 子表2 Splited

应理解,在本发明实施例中,表2的内容只是为了详细的描述技术方案,表2中的状态标识还可以通过其他的逻辑表示方式进行标识,例如,通过“0”表示正在分裂状态,通过“1”表示分裂完成状态,在本发明实施例中对此不作任何限制。

还需理解,在本发明实施例中,共享状态机中记录各子表的状态标识是通过状态表的形式体现的,在本发明实施例中也可以通过其他的逻辑关系形式实现共享状态机中记录各子表的状态信息,在本发明实施例中对此不作限制。

在S250中,当子表节点接收到用户输入的子表分裂命令时,通过管理节点向共享状态机发送第一子表,即预设置的空子表开始分裂信息,以便于共享状态机接收到空子表开始分裂信息之后,根据接收到的信息修改共享状态机的状态表中记录的空子表的状态标识,将状态标识修改为开始分裂的状态标识,如表2中所示的状态标识为“Spliting”;这样,期望访问第一子表时,可以通过共享状态机清楚了解第一子表的状态。

可选地,作为本发明另一实施例,如图8所示,在将第一子表分裂为至少两个第二子表之后,该方法200还包括:

S260,向共享状态机发送第二信息,第二信息包括第一子表分裂完成信息,以用于共享状态机根据第二信息,将记录的第一子表的状态标识更新为第四标识,第四标识用于表示第一子表分裂完成。

具体的,当第一子表,也就是用户为建立的用户表,划分子表时预留的空子表,当子表节点将空子表按照多个分裂点分裂为多个新子表之后,通过管理节点向共享状态机发送该空子表分裂完成的信息,以便于共享状态机接收到空子表分裂完成信息之后,将状态表中记录的空子表的状态标识由“Spliting”,修改为“Splited”,修改后的形式如表2中的子表2的状态标识,便于访问第一子表时,可以通过共享状态机清楚了解第一子表的状态。

本发明实施例提供的分布式数据库中子表分裂的方法,通过预先设定一个空子表,在需要将数据存储到该空子表时,根据预设的多个分裂点,先将空子表分裂为至少两个子表,再向新生成的至少两个子表中存储数据,实现子表的快速分裂,以提高数据读写性能。同时,在将空子表分裂之前,修改共享状态机中记录的子表的状态标识,以便于分布式数据库中的管理节点明确该空子表的服务状态,避免管理节点将该空子表节点移动到其他的子表节点中。

可选地,作为本发明另一实施例,将第一子表分裂为至少两个第二子表之后,该方法200还包括:

S270,更新元数据表中的第一子表的状态标识为第一标识。

具体的,第一标识为不支持提供读写服务的状态标识。当子表节点分裂第一子表时,在S220中在子表节点内部的状态表中将第一子表的状态标识修改为不支持提供读写服务,以便于子表快速分裂,同时避免了在子表分裂过程中,写入数据造成的数据丢失问题。当子表分裂完成之后,需要在元数据表中记录分裂之前的第一子表的状态标识为不在提供读写服务。如图7所示其中,第一子表为用户为建立的用户表划分子表时,预留的空子表。

应理解,在本发明实施例中,图7中的状态标识时通过“不再提供读写服务”和“可提供读写服务”来标识各个子表的状态标识,在本发明实施例中,元数据表中记录各子表的状态标识还可以通过其他的逻辑表示方式进行标识,例如,通过“0”表示不支持提供读写服务,通过“1”表示支持提供读写服务,在本发明实施例中对此不作任何限制。

应理解,在发明实施例中,“可提供读写服务”、“不再提供读写服务”可以分别理解为“支持提供读写服务”、“不支持提供读写服务”。

应理解,在本发明实施例中,图6和图8中描述的方法200的方法/步骤可以通过图4中的通信接口131和处理器133来实现。

还需理解,在本发明实施例中,元数据表存在于该方法200的执行主体子表节点中,元数据表还可以存在于其他的子表节点中,同样可以通过本发明实施例图5和图7所描述的方法/步骤中完成该技术方案。

图9为本发明实施例提供的一种子表节点的结构示意图,如图8所示,该子表节点800包括:当数据按照键-值类型的存储方式存储时,根据预设条件,设置第一子表,第一子表是指为存储新的键-值类型的数据而预留的空表;其中,该子表节点800包括:接收单元810、更新单元820、分裂单元830和指示记录单元840,

接收单元810,用于当新的键-值类型的数据需要存储到第一子表中时,接收用户输入的子表分裂命令,子表分裂命令包括所述第一子表的分裂点信息;

更新单元820,用于根据子表分裂命令,更新状态表中第一子表的状态标识为第一标识,第一标识用于表示第一子表不再提供读写服务;

分裂单元830,用于根据子表分裂命令中记录的分裂点信息,将第一子表分裂为至少两个第二子表,并将所述状态表中所述第二子表的状态标识为第二标识,所述第二标识用于表示所述第二子表可提供读写服务;

指示记录单元840,用于指示将至少两个第二子表所在子表节点的位置信息记录在元数据表中,以便根据所述元数据表找到用于存储所述新的键-值类型的数据的所述第二子表所在的子表节点。

具体的,第一子表为用户划分子表时,预留下来的一个空子表。用户在预留该空子表时,可以根据当前存储数据类型,预估计数据存储中Key值的范围,以保证当前存储的数据不会落在该空子表中。第二子表为子表节点根据空子表分裂信息和预设定的分裂点,将子表分裂成的新的子表。元数据表为一类特殊的表,该表保存了所有用户表的子表的路由信息,即每个子表位于哪个子表节点的相关信息。

当需要将数据存储到该空子表中时,接收单元810根据用户调用的一个接口或者一个命令,该命令为子表分裂命令,触发空子表按照预设定的分裂点分裂子表。其中,子表分裂命令中包括空子表分裂的信息。预设定的分裂点通常为至少一个分裂点,可以将空子表分裂为两个或者多个新子表。分裂点是按照数据存储的Key值点来分的。

在子表节点中可以包括状态表,状态表用于记录子表节点中各个子表的状态,例如:子表处于支持提供读写服务状态或者子表处于不支持提供读写服务状态。更新单元820根据空子表的分裂信息,将状态表中空子表的状态标识修改为不支持提供读写服务的标识。

应理解,在本发明实施例中,子表节点中记录各子表的状态标识是通过状态表的形式体现的,在本发明实施例中也可以通过其他的逻辑关系实现子表节点中各子表的状态信息记录,在本发明实施例中对此不作限制。

在本发明实施例中,子表节点将空子表的状态标识修改为不支持提供读写服务,以便于子表节点内部明确该空子表的服务状态。

分裂单元830根据空子表分裂点信息和预设定的分裂点,将子表分裂成的新的子表,以用于提高数据的读写性能。

在本发明实施例中,子表节点将新生成的子表的状态标识为支持提供读写服务,以明确新生成子表处于何种中服务状态,方便将存储的新数据存储到新生成的子表中,以提高数据的读写性能。

指示记录单元840将新生成的至少两个子表所在的子表节点的位置信息记录在元数据表中,以便于可以通过元数据表记录的数据存储的子表节点位置信息,寻找所需要查询的数据。

本发明实施例提供的分布式数据库,通过预先设定一个空子表,在需要将数据存储到该空子表时,根据预设的多个分裂点,先将空子表分裂为至少两个子表,再向新生成的至少两个子表中存储数据,实现子表的快速分裂,以提高数据读写性能。

可选地,作为本发明另一实施例,如图10所示,分布式数据库800还包括发送单元850,发送单元850用于向共享状态机发送第一信息,第一信息包括第一子表开始分裂的信息,以使共享状态机根据第一信息,将记录的第一子表的状态标识更新为第三标识,第三标识用于表示第一子表开始分裂。

可选地,作为本发明另一实施例,发送单元850还用于,向共享状态机发送第二信息,第二信息包括第一子表分裂完成信息,以用于共享状态机根据第二信息,将记录的第一子表的状态标识更新为第四标识,第四标识用于表示第一子表分裂完成。

可选地,作为本发明另一实施例,更新单元820还用于,更新元数据表中的第一子表的状态标识为第一标识。

本发明实施例提供的分布式数据库中子表分裂的方法,通过预先设定一个空子表,在需要将数据存储到该空子表时,根据预设的多个分裂点,先将空子表分裂为至少两个子表,再向新生成的至少两个子表中存储数据,实现子表的快速分裂,以提高数据读写性能。同时,在将空子表分裂之前,修改共享状态机中记录的子表的状态标识,以便于分布式数据库中的其他子表节点明确该空子表的服务状态,避免在空子表分裂过程中移动,造成数据丢失。

应理解,在发明实施例中,“可提供读写服务”、“不再提供读写服务”可以分别理解为“支持提供读写服务”、“不支持提供读写服务”。

需要说明的是,在本发明实施例中,根据本发明实施例的子表节点800对应根据本发明实施例的方法200的执行主体,并且子表节点800中的各个模块的上述和其他操作和/或功能分别为了实现图6和图8中的各个方法的相应流程,为了简洁,在这里不再赘述。

专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。

以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号