一种能够保证分布式数据库全表查询语句结果集顺序的方法和装置与流程

文档序号:21031836发布日期:2020-06-09 20:13阅读:222来源:国知局
一种能够保证分布式数据库全表查询语句结果集顺序的方法和装置与流程
本发明涉及分布式数据库查询
技术领域
,具体地说是一种能够保证分布式数据库全表查询语句结果集顺序的方法和装置。
背景技术
:查询操作是数据库核心的操作,数据库中其他的操作均或多或少的依赖于查询操作返回的结果集。分布式数据库将计算和存储分布在不同的节点上。数据被分割开来,存储在不同的数据库服务器上,随着数据量的增加服务器的数目也随之增加。分布式技术支持硬件以水平扩展的方式来获得线性增长的性能和存储,同时对硬件的性能要求也较为宽松。在分布式数据库中,每个服务器节点只存储数据的一部分,节点之间是彼此信任的,这些节点组合成一个完整的分布式数据库。在分布式数据库进行相关操作时,会将总的工作任务分解成若干个小的任务,通过分布式并行执行的方式将其完成。因此,在对一个分布式数据库进行数据查询操作时,会将一个查询操作分解为若干个执行计划,由各个节点执行具体的查询操作,从而能够得到若干个结果集,最后将这些结果集整合起来形成一个总的结果集返回给用户。通过分析上述的流程,由于网络带宽不同,各个节点性能存在差异,各个节点形成返回结果集所用的时间存在较大差异。当多次执行不加排序约束的select语句时,会使得最终结果集中的数据的顺序不一致。技术实现要素:本发明的技术任务是针对以上不足之处,提供一种能够保证分布式数据库全表查询语句结果集顺序的方法和装置,能够实现分布式数据库管理系统下保证多次查询操作返回的结果集中的顺序一致。本发明解决其技术问题所采用的技术方案是:一种能够保证分布式数据库全表查询语句结果集顺序的方法,该方法基于分布式数据库,数据以range为基本存储单元,网关节点根据从元数据解析的range信息,并根据range的startkey的顺序生成执行计划,然后按照顺序将执行计划发送到对应节点执行,并对返回结果按照执行计划发送的顺序进行组合;所述range为分布式数据库数据存储单元,range中存储的数据按照表中数据行的编号进行排序。由于各个range中存储的数据已经按照表中数据行编号进行排序,所以各个节点返回的查询结果中的数据是排好的,网关节点在对返回结果进行组合的过程中,无论各个执行计划返回结果的顺序如何,只要对返回结果按照执行计划发送的顺序进行组合,就可以保证多次查询操作返回结果的顺序。该方法可以在不需要对返回结果集进行全量排序的情况下,实现结果集顺序的一致,并且不影响原有功能,排序性能高,解决在现有分布式数据库中存在的进行多次全表查询时出现的返回的结果集中数据的顺序不一致的问题。优选的,range是分布式数据库数据存储的基本单元,在分布式数据库中,若干条有序数据组成一个range,存储在节点上,一个节点可以存储一个或多个range。进一步的,range的数据结构中包含rangeid、node信息、startkey和endkey,其中,rangeid用于标记自身,当一个节点中存储多个range时,通过rangeid来进行区分;node信息包括所在节点的地址和端口信息;startkey是range存储数据的起始值,endkey是range存储数据的结束值,存储范围的表示是左闭右开的[startkey,endkey)。网关节点根据从元数据解析的range信息,所述元数据是描述其它数据的数据,描述数据的属性信息,其使用目的在于识别资源,实现简单高效地管理大量网络化数据;实现信息资源的有效发现、查找。元数据一经建立,便可共享。range中存储的数据按照表中数据行的编号进行排序,表中数据行的编号表示为rowid,分布式数据库的表中的每一行数据都有一个唯一的标识符称为rowid,可以使用它来进行数据访问。表中每增加一条数据时,rowid便会自动加一。所述node信息包括range所在节点的地址和端口信息,node即节点,分布式数据库的组成单元,通常指一台物理机或虚拟服务器。进一步的,所述网关节点为用户客户端访问的节点,分布式数据库中,各网关节点对等,两两之间能够相互通信,用户通过链接任意一个网关节点进行操作,由该节点将操作具体化,并下发给其余各个节点执行,并将返回的结果进行组合,返回给用户。优选的,该方法中生成执行计划的具体方式如下:当查询语句到达网关节点时,记该网关节点为node1,首先从该节点中获取元数据metadata,从元数据metadata中解析出t1表中数据存储的相关range信息,node1根据range信息,按照startkey生成执行计划,并将执行计划按照顺序分发给对应的节点执行。该方案的优化之处在于:制定的执行计划是有序的,其次序与t1表的range存储时生成的元数据中的startkey的次序有关。每个计划负责查询特定范围的数据,取range上[startkey,endkey)范围内的数据。进一步的,返回结果的具体方式如下:执行计划之后,将得到的结果集返回给node1,node1对结果集进行整合:当全部结果集返回时,按照执行计划下发的顺序对各个结果集进行重新排列,使其有序,将最终的结果集返回给用户。该方案的优化之处是:执行计划和返回的结果集是一一对应的,执行计划的下发顺序代表了期待的返回的结果集的顺序。当返回结果集的顺序与期待的顺序不一致时,则对其按照执行计划的顺序进行调整,以保证多次查询数据得到的数据顺序一致。为证明该方法的效果,多次执行全表查询语句,返回结果的顺序一致,在数据库中创建表t,在表t中新增带有id的数据,如id为1,2,3的数据,使具有不同id的数据分布在不同的range中,对表t执行多次“select*fromt;”统计出现的结果及出现的次数,校验返回结果集顺序一致性。本发明还要求保护一种能够保证分布式数据库全表查询语句结果集顺序的装置,该装置包括基本存储单元、网关节点以及执行模块,基本存储单元由若干条有序数据组成,存储在节点上;网关节点根据基本存储单元的数据顺序生成执行计划,然后按照该顺序将执行计划发送至基本存储单元对应的节点进行执行;网关节点对返回的结果按照执行计划发送的顺序进行组合,实现结果集顺序的一致。一个节点可以存储一个或多个所述的基本存储单元。进一步的,所述基本存储单元为range,range包含rangeid、node信息、startkey和endkey,其中,rangeid用于标记自身,当一个节点中存储多个range时,通过rangeid来进行区分;node信息包括所在节点的地址和端口;startkey是range存储数据的起始值,endkey是range存储数据的结束值,存储范围的表示是左闭右开的[startkey,endkey);所述网关节点根据从元数据解析的range信息,根据range的startkey的顺序生成执行计划;range中存储的数据按照表中数据行的编号进行排序,表中每增加一条数据,表中数据行的编号自动加一。具体的,该装置运行过程如下:1)、获取分布式数据库数据,解析基本存储单元的信息;2)、根据基本存储单元的信息和该基本存储单元的数据顺序生成有序的执行计划;3)、并发下发执行计划;4)、执行模块执行所述执行计划并返回执行结果;5)、返回结果按照执行计划下发的顺序进行调整;6)、返回最终结果到客户端。本发明的一种能够保证分布式数据库全表查询语句结果集顺序的方法和装置与现有技术相比,具有以下有益效果:制定的执行计划是有序的,其次序与t1表的range存储时生成的元数据中的startkey的次序有关。每个计划负责查询特定范围的数据,取range上[startkey,endkey)范围内的数据。执行计划和返回的结果集是一一对应的,执行计划的下发顺序代表了期待的返回的结果集的顺序。当返回结果集的顺序与期待的顺序不一致时,则对其按照执行计划的顺序进行调整,以保证多次查询数据得到的数据顺序一致。该方法和装置可以在不需要对返回结果集进行全量排序的情况下,实现结果集顺序的一致,并且不影响原有功能,且排序性能高。附图说明图1是本发明能够保证分布式数据库全表查询语句结果集顺序的方法的结构示意图;图2是本发明能够保证分布式数据库全表查询语句结果集顺序的装置的操作流程图。具体实施方式下面结合附图和具体实施例对本发明作进一步说明。实施例一一种能够保证分布式数据库全表查询语句结果集顺序的方法,该方法基于浪潮云海分布式数据库,数据以range为基本存储单元。网关节点根据从元数据metadata解析的range信息,并根据range的startkey的顺序生成执行计划,然后按照顺序将执行计划发送到对应节点执行,并对返回结果按照执行计划发送的顺序进行组合。所述range是浪潮云海分布式数据库数据存储的基本单元,浪潮云海分布式数据库中,若干条有序数据组成一个range,存储在节点上,一个节点可以存储一个或多个range。range的数据结构中包含rangeid、node信息、startkey和endkey等部分,其中,rangeid用于标记自身,当一个节点中存储多个range时,通过rangeid来进行区分;node信息主要指所在节点的地址和端口;startkey是range存储数据的起始值,endkey是range存储数据的结束值,存储范围的表示是左闭右开的[startkey,endkey)。range中存储的数据按照表中数据行的编号进行排序,分布式数据库的表中的每一行数据都有一个唯一的标识符称为rowid,可以使用它来进行数据访问。表中每增加一条数据时,rowid便会自动加一。网关节点为用户客户端访问的节点,分布式数据库中,各网关节点对等,两两之间能够相互通信,用户通过链接任意一个网关节点进行操作,由该节点将操作具体化,并下发给其余各个节点执行,并将返回的结果进行组合,返回给用户。node即节点,分布式数据库的组成单元,通常指一台物理机或虚拟服务器。由于各个range中存储的数据已经按照表中数据行编号进行排序,所以各个节点返回的查询结果中的数据是排好的,网关节点在对返回结果进行组合的过程中,无论各个执行计划返回结果的顺序如何,只要对返回结果按照执行计划发送的顺序进行组合,就可以保证多次查询操作返回结果的顺序。该方法可以在不需要对返回结果集进行全量排序的情况下,实现结果集顺序的一致,并且不影响原有功能,排序性能高,解决在现有分布式数据库中存在的进行多次全表查询时出现的返回的结果集中数据的顺序不一致的问题。该方法中生成执行计划时:当查询语句到达网关节点时,记该网关节点为node1,首先从该节点中获取元数据metadata,从元数据metadata中解析出t1表中数据存储的相关range信息,node1根据range信息,按照startkey生成执行计划,并将执行计划按照顺序分发给对应的节点执行。该方案的优化之处在于:制定的执行计划是有序的,其次序与t1表的range存储时生成的元数据中的startkey的次序有关。每个计划负责查询特定范围的数据,取range上[startkey,endkey)范围内的数据。返回结果时:执行计划之后,将得到的结果集返回给node1,node1对结果集进行整合:当全部结果集返回时,按照执行计划下发的顺序对各个结果集进行重新排列,使其有序,将最终的结果集返回给用户。该方案的优化之处是:执行计划和返回的结果集是一一对应的,执行计划的下发顺序代表了期待的返回的结果集的顺序。当返回结果集的顺序与期待的顺序不一致时,则对其按照执行计划的顺序进行调整,以保证多次查询数据得到的数据顺序一致。通过本方法多次执行全表查询语句,返回结果的顺序保持一致。本方法在已设计的50多个场景中的通过率达到了100%。下面对其中最简单而经典的场景进行表述,如下所述:在数据库中创建如下所示的表t,并新增id为1,2,3的数据,如表1所示。然后在2,3的位置对表进行分隔,使得id为1,2,3的数据分布在不同的range。表1数据库创建表t的结构及内容idnameage1zhou252wu263zheng27对表t执行200次“select*fromt;”统计出现的结果及其出现的次数。不使用优化方案,执行200次select操作出现的结果和每种结果的次数,如表2所示。表2不使用优化方案得到的结果集顺序及频率可能的结果次数(1,2,3)30(1,3,2)35(2,1,3)31(2,3,1)29(3,2,1)37(3,1,2)38使用优化方案,执行200次select操作出现的结果和每种结果的次数,如表3所示。表3不使用优化方案得到的结果集顺序及频率可能的结果次数(1,2,3)200(1,3,2)0(2,1,3)0(2,3,1)0(3,2,1)0(3,1,2)0注:因为id作为主键,仅统计id出现的顺序,例如(1,2,3)表示的情况是:idnameage1zhou252wu263zheng27(3,1,2)表示的情况是:idnameage3zheng271zhou252wu26从上面的两个案例的对比中,该优化方案能够有效解决分布式数据库存在的执行全表查询语句时出现的数据顺序不一致的问题。该方法的结构图如图1所示。该方法的执行步骤如下:1、获取mata数据,解析range信息;2)、根据range信息和range的startkey生成有序的执行计划;3)、并发下发执行计划;4)、对应节点执行所述执行计划并返回执行结果;5)、返回结果按照执行计划下发的顺序进行调整;6)、返回最终结果到客户端。实施例二一种能够保证分布式数据库全表查询语句结果集顺序的装置,该装置包括基本存储单元、网关节点以及执行模块,基本存储单元由若干条有序数据组成,存储在节点上。网关节点根据基本存储单元的数据顺序生成执行计划,然后按照该顺序将执行计划发送至基本存储单元对应的节点进行执行;网关节点对返回的结果按照执行计划发送的顺序进行组合,实现结果集顺序的一致。一个节点可以存储一个或多个所述的基本存储单元。所述基本存储单元为range,range是浪潮云海分布式数据库数据存储的基本单元,浪潮云海分布式数据库中,若干条有序数据组成一个range,存储在节点上,一个节点可以存储一个或多个range。range包含rangeid、node信息、startkey和endkey,其中,rangeid用于标记自身,当一个节点中存储多个range时,通过rangeid来进行区分;node信息包括所在节点的地址和端口;startkey是range存储数据的起始值,endkey是range存储数据的结束值,存储范围的表示是左闭右开的[startkey,endkey);所述网关节点根据从元数据metadata解析的range信息,根据range的startkey的顺序生成执行计划;各个range中存储的数据按照rowid(表中数据行的编号)排序,所以各个节点返回的查询结果中的数据时排好序的。range中存储的数据按照表中数据行的编号进行排序,表中每增加一条数据,表中数据行的编号自动加一。网关节点在对返回结果进行组合的过程中,无论各个执行计划返回结果的顺序如何,只要对返回结果按照执行计划发送的顺序进行组合,就可以保证多次查询操作返回结果的顺序。如图2所示,该装置运行过程如下:1)、获取分布式数据库数据,解析基本存储单元的信息;2)、根据基本存储单元的信息和该基本存储单元的数据顺序生成有序的执行计划;3)、并发下发执行计划;4)、执行模块执行所述执行计划并返回执行结果;5)、返回结果按照执行计划下发的顺序进行调整;6)、返回最终结果到客户端。通过上面具体实施方式,所述
技术领域
的技术人员可容易的实现本发明。但是应当理解,本发明并不限于上述的具体实施方式。在公开的实施方式的基础上,所述
技术领域
的技术人员可任意组合不同的技术特征,从而实现不同的技术方案。除说明书所述的技术特征外,均为本专业技术人员的已知技术。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1