一种关系型分布式数据库的分片存储方法及装置与流程

文档序号:17442412发布日期:2019-04-17 04:56阅读:327来源:国知局
一种关系型分布式数据库的分片存储方法及装置与流程

本发明涉及数据存储领域,特别涉及一种关系型分布式数据库的分片存储方法及装置。



背景技术:

随着数据量的猛增,一个节点的数据存储结构已经无法满足用户的访问需求,为了解决这个问题,一般会采用分布式的存储结构。这种结构将数据按照一定的规则存储到不同的数据节点上,有效的解决了一个数据存储节点无法承受大量数据访问的问题。那么应该按照什么规则将各个数据表划分到不同的数据节点,有人提出了一种针对社交网络数据进行分库的方法,这种方法首先使用贝叶斯方法识别出网络中的块结构,然后将得到的每个块映射到一个数据库;有人提出使用聚类分析完成对社交化网络数据库进行分库;有人部署并评估了企业优化引擎—hermans,根据通信数据分析生成用户的社交图,并对用户进行空间并置,将空间分布紧密的用户放在同一个服务器上,减少邮件收发双方的邮件副本的二次存储空间浪费;有人提出一种可以自由设定分段范围的分库方法;有人研究了一个系统—volley,依照用户的访问日志,将数据服务器按照地理分布进行划分,就是让信息的接收者更加靠近信息源;有人提出了一致性hash算法;有人研发的spar系统将社交网络中的用户和所有邻居用户数据都放置在一个服务器上;有人提出一种支持自由规划的分库扩容方案;还有常用的水平切分或垂直切分方法,水平切分就是将数据表行按照一定的规则存储到不同的数据节点,垂直切分就是按照功能模块将数据表存储到不同的数据节点。在将数据表划分到不同存储节点的过程,数据表的连接操作是一个很重要的问题,而上述划分方法在对数据进行划分的过程中,没有考虑数据表的连接操作,这样将会出现跨存储节点的数据表连接操作,使操作数据库的性能很差。



技术实现要素:

本发明的主要目的是提出一种关系型分布式数据库的分片存储方法,旨在克服以上问题。

为实现上述目的,本发明提出的一种关系型分布式数据库的分片存储方法,包括如下步骤:

s10基于系统数据库建立有向图数据库模型,有向图数据库模型包括:

以系统数据表为模型的节点及以系统数据表之间外键约束关系为两个节点间有向边生成的系统有向图;

将系统有向图转化的邻接矩阵;

在邻接矩阵以入度为0的某一节点为起点遍历其他节点获得的路径集;

对路径集按节点个数多少进行排序获得的节点有向序列集;

基于节点有向序列集有向性求解所得的有向图各个节点的最小有向距离;

s20输入待存储数据表、其与具有对应外键约束关系节点之间的有效距离至有向图数据库模型;

s30分片存储数据表:以待存储数据表作为表节点基于节点有向序列集有向性遍历递归路径集,将表节点加入到在路径集有效距离范围内的节点有向序列集。

优选地,所述系统数据表之间的外键约束关系为以下三种约束关系的其中之一:

直接外键约束关系:创建数据表时,直接使用sql语句指定的外键约束关系;

传递外键约束关系:数据表a的字段参照数据表b的主键字段,数据表b的字段参照数据表c的主键字段,数据表a的参照字段与数据表c的主键字段是传递外键约束关系;

隐式外键约束关系:数据表b的字段参照数据表a的主键字段,表c的字段参照数据表a的主键字段,数据表b与数据表c的参照字段是隐式外键约束关系。

优选地,所述s30之后还包括s40:

s401在邻接矩阵寻找入度为0的节点作为表节点启动遍历查找;

s402判断该节点是否被访问过,若被访问过,则标记该节点,且返回s401;若未被访问过,则进入s403;

s403从该节点沿着路径集中其对应的路径深度递归遍历,直至该节点无路可走;

s404由该节点的所有遍历路径生成新的路径集。

优选地,子路径是指被另一条节点路径完全包含的节点路径,所述s404之后还包括:

s405删除表节点的子路径,生成新的路径集。

优选地,所述s404之后还包括:

s405识别并删除表节点的子路径,生成新的路径集。

优选地,所述求解所得的有向图各个节点的最小有向距离的方法采用佛洛依德算法。

优选地,所述对路径集按节点个数多少进行排序是根据路径节点个数从小到大的顺序进行的排序。

本发明还公开了一种关系型分布式数据库的分片存储装置,包括:

建模模块,用于基于系统数据库建立有向图数据库模型,有向图数据库模型包括:以系统数据表为模型的节点及以系统数据表之间外键约束关系为两个节点间有向边生成的系统有向图、将系统有向图转化的邻接矩阵、在邻接矩阵以入度为0的某一节点为起点遍历其他节点获得的路径集、对路径集按节点个数多少进行排序获得的节点有向序列集、基于节点有向序列集有向性求解所得的有向图各个节点的最小有向距离;

输入模块,用于输入待存储数据表、其与具有对应外键约束关系节点之间的有效距离至有向图数据库模型;

分片存储模块,用于以待存储数据表作为表节点基于节点有向序列集有向性遍历递归路径集,将表节点加入到在路径集有效距离范围内的节点有向序列集。

优选地,所述建模模块包括:

第一生成单元,用于以系统数据表为模型的节点及以系统数据表之间外键约束关系为两个节点间有向边生成的系统有向图;

转化单元,用于将系统有向图转化的邻接矩阵;

第二生成单元,用于在邻接矩阵以入度为0的某一节点为起点遍历其他节点获得的路径集;

排序单元,用于对路径集按节点个数多少进行排序获得的节点有向序列集;

求解单元,用于基于节点有向序列集有向性求解所得的有向图各个节点的最小有向距离。

优选地,所述第二生成单元包括:

寻找子单元,用于寻找无有向边指向的节点作为起点启动遍历查找;

第一判断子单元,用于判断该节点是否被访问过,若被访问过,则标记该节点,且返回寻找单元;若未被访问过,则进入遍历单元;

遍历子单元,用于从该节点沿着路径集中其对应的路径深度递归遍历,直至该节点无路可走;

生成子单元,用于由所有节点的遍历路径生成路径集;

第二判断子单元,用于识别节点子路径;

删除子单元,用于删除节点子路径。

本发明将系统数据库抽像为有向图数据库模型,该模型包括系统有向图、邻接矩阵、路径集、节点有向序列集、最小有向距离等特征,将存在外键约束关系的数据表作为有向图一个表节点,在有向图数据库模型的路径集基于节点有向序列集遍历递归,将表节点加入到在路径集有效距离范围内的节点有向序列集。这样,实现了将在约束关系的数据表划分到同一个数据表节点,有效避免数据表跨存储节点的连接操作。

本发明还通过将外键约束关系定义为以下三种约束关系的其中之一:

直接外键约束关系、传递外键约束关系、隐式外键约束关系,进一步地,将用户数据表划分到相对应外键约束关系的数据存储节点,避免出现跨节点表连接操作。

附图说明

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

图1为本方法一实施例的方法流程图;

图2为本方法另一实施例的方法流程图;

图3为本装置一实施例的功能模块图;

图4为本装置的所述建模模块的功能模块细化图;

图5为本装置的所述第二生成单元的功能模块细化图;

图6为本发明实操实例的有向图;

图7为本发明实操实例的邻接矩阵示意图;

图8为本发明实操实例的各个节点间有向最小距离示意图;

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

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

需要说明,若本发明实施例中有涉及方向性指示(诸如上、下、左、右、前、后……),则该方向性指示仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。

另外,若本发明实施例中有涉及“第一”、“第二”等的描述,则该“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。

如图1-8所示,本发明提出的一种关系型分布式数据库的分片存储方法,包括如下步骤:

s10基于系统数据库建立有向图数据库模型,有向图数据库模型包括:

以系统数据表为模型的节点及以系统数据表之间外键约束关系为两个节点间有向边生成的系统有向图;

将系统有向图转化的邻接矩阵;

在邻接矩阵以入度为0的某一节点为起点遍历其他节点获得的路径集;

对路径集按节点个数多少进行排序获得的节点有向序列集;

基于节点有向序列集有向性求解所得的有向图各个节点的最小有向距离;

s20输入待存储数据表、其与具有对应外键约束关系节点之间的有效距离至有向图数据库模型;

s30分片存储数据表:待存储数据表作为表节点基于节点有向序列集有向性遍历递归路径集,将表节点加入到在路径集有效距离范围内的节点有向序列集。

优选地,所述系统数据表之间的外键约束关系为以下三种约束关系的其中之一:

直接外键约束关系:创建数据表时,直接使用sql语句指定的外键约束关系;

传递外键约束关系:数据表a的字段参照数据表b的主键字段,数据表b的字段参照数据表c的主键字段,数据表a的参照字段与数据表c的主键字段是传递外键约束关系;

隐式外键约束关系:数据表b的字段参照数据表a的主键字段,表c的字段参照数据表a的主键字段,数据表b与数据表c的参照字段是隐式外键约束关系。

优选地,所述s30之后还包括s40:

s401在邻接矩阵寻找入度为0的节点作为表节点启动遍历查找;

s402判断该节点是否被访问过,若被访问过,则标记该节点,且返回s401;若未被访问过,则进入s403;

s403从该节点沿着路径集中其对应的路径深度递归遍历,直至该节点无路可走;

s404由该节点的所有遍历路径生成新的路径集。

优选地,子路径是指被另一条节点路径完全包含的节点路径,所述s404之后还包括:

s405删除表节点的子路径,生成新的路径集。

优选地,所述s404之后还包括:

s405识别并删除表节点的子路径,生成新的路径集。

优选地,所述求解所得的有向图各个节点的最小有向距离的方法采用佛洛依德算法。

优选地,所述对路径集按节点个数多少进行排序是根据路径节点个数从小到大的顺序进行的排序。

在本发明实施例中,本发明先基于系统数据库建立有向图数据库模型,该模型由7个程序执行完成,其主干程序为algorithm1,其他程序都被algorithm1调用,为了实现将存在外键约束关系的数据表划分到一个数据节点,需要将所有的数据表以及数据表之间的外键约束转化为一个有向图,每个数据表定义为有向图中的一个数据节点,每个外键约束关系定义为两个节点之间的一条有向边,如果表b引用表a的主键作为外键,那么在有向图中就会有一条从b指向a的有向箭头。得到了数据表的有向图后,执行这7个算法程序,完成将数据表划分到不同数据节点,避免跨节点连接操作。

主干程序algorithm1具体为:

algorithm2:searchpath(用来实现基于邻接矩阵的深度查询,找到所有的路径,生成路径集)

(1)输入邻接矩阵

(2)输出路径集

(3)以邻接矩阵的入度为0的节点为起点进行遍历查找,满足条件开始查找,这里所说的条件为:入度为0且未被访问过的节点。查找过程调用algorithm3:识别节点是否被访问,被访问过的节点入度标记为1,就此止步;未被访问过的节点开始深度递归遍历,直至无路可走时返回路径,并将访节点遍历历经路径加入路径集,形成新的路径集。

algorithm4:deletesubpath(用以删除algorithm2中得到的路径的子路径),其间还会调用algorithm5,algorithm5:iseffecpath(用来识别是否为有效路径,即没有子路径的节点路径),这里所说的子路径为被另一条节点路径完全包含的节点路径。

algorithm6:sortpath(用来对路径序列进行排序),输入有效路径集,输出排序后的节点有向序列集,排序的原则:根据路径所包含节点个数从少到多排序。

algorithm7:mindistancematrix(用来求所有节点之间的最小有向距离),输入邻接矩阵,输出矩阵节点的最小有向距离,求解最小有向距离采用佛洛依德算法,该算法为现有技术,在此不累述。

当数据表作为表节点输入有向图数据库模型时,同时输入的还有其与具有对应外键约束关系节点之间的有效距离,具体情况需要根据数据表内的内容找到对应外键约束关系来定义适中的distance值(即有效距离),也称为距离变量。如果distance值定义过大,会出现将很多数据表划分到同一个数据节点;如果distance值定义过小,又会导致出现跨节点的数据表连接操作,所以需要根据根据数据表内的内容找到对应外键约束关系来定义适中的distance值,这样这样才能很合理的将用户数据表划分到不同的数据节点。

本发明还公开了一种关系型分布式数据库的分片存储装置,用于实现上述方法,其包括:

建模模块10,用于基于系统数据库建立有向图数据库模型,有向图数据库模型包括:以系统数据表为模型的节点及以系统数据表之间外键约束关系为两个节点间有向边生成的系统有向图、将系统有向图转化的邻接矩阵、在邻接矩阵以入度为0的某一节点为起点遍历其他节点获得的路径集、对路径集按节点个数多少进行排序获得的节点有向序列集、基于节点有向序列集有向性求解所得的有向图各个节点的最小有向距离;

输入模块20,用于输入待存储数据表、其与具有对应外键约束关系节点之间的有效距离至有向图数据库模型;

分片存储模块30,用于以待存储数据表作为表节点基于节点有向序列集有向性遍历递归路径集,将表节点加入到在路径集有效距离范围内的节点有向序列集。

优选地,所述建模模块10包括:

第一生成单元101,用于以系统数据表为模型的节点及以系统数据表之间外键约束关系为两个节点间有向边生成的系统有向图;

转化单元102,用于将系统有向图转化的邻接矩阵;

第二生成单元103,用于在邻接矩阵以入度为0的某一节点为起点遍历其他节点获得的路径集;

排序单元104,用于对路径集按节点个数多少进行排序获得的节点有向序列集;

求解单元105,用于基于节点有向序列集有向性求解所得的有向图各个节点的最小有向距离。

优选地,所述第二生成单元103包括:

寻找子单元1031,用于寻找无有向边指向的节点作为起点启动遍历查找;

第一判断子单元1032,用于判断该节点是否被访问过,若被访问过,则标记该节点,且返回寻找单元;若未被访问过,则进入遍历单元;

遍历子单元1033,用于从该节点沿着路径集中其对应的路径深度递归遍历,直至该节点无路可走;

生成子单元1034,用于由所有节点的遍历路径生成路径集;

第二判断子单元1035,用于识别节点子路径;

删除子单元1036,用于删除节点子路径。

实操实例:

1.需要将系统的数据表转化为有向图,这里以某个系统为例,假设该系统的数据表经过转换之后,得到的有向图如图6所示。

2.在这个系统中有9张数据表,通过有向图获得系统中各个数据表之间的外键约束关系。将系统的有向图转化为邻接矩阵,结果如图7所示。

3.通过把邻接矩阵作为输入条件,经过algorithm2可以得到路径集r={dhcb,dcb,fab,fghcb,fae,ighcb},其间调用algorithm3开始路径遍历。

4.从得到的路径集通过使用algorithm4得到的有效路径集。比如:节点d的路径序列“dc”是节点d的路径序列“hdcb”的子路径,所以经过算法运算之后,会将子路径删除,得到最后的有效路径集。这里所说的子路径是指被另一条路径完全包含的路径。其间调用algorithm5,判断是否为有效路径集。

5.得到有效路径集之后,需要对路径集中的路径序列进行排序,将路径中节点比较少的路径排在前面,节点数比较多的路径序列排在后面,排序过程使用algorithm6完成,这样将会得到根据路径中节点数从小到大排好了序的路径集。比如:路径集初始包含abcae两条路径,排序之后就变成了aeabc。

6.求解有向图各个数据节点中的最短距离:得到了有序的路径序列集后,需要求解到达各个数据节点的有向最小距离,这个操作使用algorithm7完成,经过这个算法之后,可以得到各个节点之间的有向最小距离,各个节点之间的有向最小距离,如图8所示。

7.在algorithm1中,定义表节点与系统数据库具有对应外键约束关系节点之间的距离变量(即有效距离),逐渐遍历各条有效路径,将有效距离范围内的数据节点添加到相应的路径序列,完成表节点于系统数据库的分片存储。比如:以x节点为例,定义距离c节点的有向最小距离为2,在有效路径abcdefg中,x直接加到末尾,生成新的有效路径abcdefgx,这样有效路径内的节点被分到同一个数据库服务器,有效路径是为了将进行连接操作数据表划分到一个数据库服务器的手段。

以上所述仅为本发明优选实施例,并非限制本发明的专利范围,凡是在本发明的发明构思下,利用本发明说明书及附图内容所作的等效结构变换,或直接/间接运用在其他相关的技术领域均包括在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1