数据库部署方法与流程

文档序号:12625165阅读:1587来源:国知局

本发明涉及数据存储,特别涉及一种数据库部署方法。



背景技术:

随着互联网技术的快速发展,网络信息量呈爆炸式的增长。传统的存储体系结构已经越来越不能满足快速增长的海量数据存储需求,同时也面临着存储的实时性、可靠性和容错性等各方面的技术挑战。当现有的单一存储系统的读写量大幅增加时,存储设备可能会因硬件设备负载过重而形成性能瓶颈;存储设备的用户终端数据读写与数据备份均占用带宽,因此会对用户终端的读写造成影响,造成服务质量下降。



技术实现要素:

为解决上述现有技术所存在的问题,本发明提出了一种数据库部署方法,包括:

将多个分布式数据库节点组成数据阵列,每个数据阵列设置主控数据库节点,统一管理数据阵列中的记录信息;

当某个数据库节点的记录信息发生更新时,仅将更新的信息发送给主控节点,再由主控节点将该信息广播给数据阵列中其他数据库节点。

优选地,所述主控节点具有有效期,采用时间片轮转机制通过优化策略选择产生下一个主控节点;

除主控节点外,每个分布式数据阵列还选出备用主控节点,时刻监督主控节点的状态,当主控节点出现意外不能正常工作时,其将取代主控节点,当某个分布式数据库节点上的记录信息发生改变时,只将该修改信息发送给主控节点,由主控节点将该修改信息同步到数据阵列中其它分布式数据库节点上,并将更新结果同样发送到其他数据阵列的主控节点上,其他数据阵列的主控节点将会更新其所属数据阵列的分布式数据库节点,最后使整个分布式数据存储系统都得到更新。

优选地,

给每个分布式数据库节点设定一个权值Wi,当超过有效期时,进行下一轮的选择,选择Wi的最高的前两个数据库作为新的主控节点和备用主控节点,其中权值Wi计算如下:

<mrow> <msub> <mi>W</mi> <mi>i</mi> </msub> <mo>=</mo> <msub> <mi>A</mi> <mi>i</mi> </msub> <mo>*</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <msub> <mi>U</mi> <mi>i</mi> </msub> <mo>)</mo> </mrow> <mo>*</mo> <msub> <mi>M</mi> <mi>i</mi> </msub> <mo>/</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>j</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>n</mi> </munderover> <msub> <mi>M</mi> <mi>j</mi> </msub> </mrow>

其中Ai表示第i个节点所在设备的网络带宽容量与响应时间的乘积;

Ui表示第i个节点所在设备的处理器平均响应时间;

Mi表示第i个节点所在设备的剩余存储器空间,n为数据阵列下的数据库节点总数。

优选地,所述每个分布式数据库节点上都维护自身的数据服务,分布式数据库节点通过采用分布式互动控制策略、消息通信协议、负载均衡策略来工作;当有用户终端请求到达时,根据预定策略指定特定的分布式数据库节点来处理该请求,通过查找元数据检索表后找到所请求的记录所对应的内部节点地址,从而使用户终端请求直接定位到所要读写的数据所在的分布式数据库节点上,再进行相应操作或读写。

优选地,所述分布式数据库节点采用以下副本拷贝方法,首先对数据库节点状态进行估计,然后将数据库节点映射到基于散列构造的圆形列表,将副本映射到圆形列表;根据预设策略存储到某一数据库节点上,完成副本部署拷贝;

在构造的圆形列表中,每个数据库节点i具有权值Vi

Vi=ζLi+(1-ζ)Dij,(1<i<n,n为数据阵列中的节点数)

Li=(Ai-Amin)/(Amax-Amin)

Dij=(dij-Dmin)/(Dmax-Dmin)

Ai表示第i个节点所在设备的网络带宽容量与响应时间的乘积,Amax与Amin分别为Ai的最大值和最小值;

dij表示第i个节点到第j个节点的网络距离,Dmax与Dmin分别为dij的最大值和最小值;

ζ是调节因子,用于调节节点负载Li和节点间距离参数Dij在权值估计中的比重;

通过散列运算,得到每个数据库节点产生的散列节点在圆形列表中的映射值,其映射值的集合用HG表示;每个数据库节点i产生的散列节点集合为HGi,包含的散列节点个数为v1*gwi/gwmin

其中gwmin为节点权值集合中最小的权值,v1为有最小权值的节点产生的散列节点个数,并且每个节点占有的权值为:

<mrow> <msub> <mi>gw</mi> <mi>i</mi> </msub> <mo>=</mo> <mfrac> <msub> <mi>V</mi> <mi>i</mi> </msub> <mrow> <munderover> <mo>&Sigma;</mo> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>n</mi> </munderover> <msub> <mi>V</mi> <mi>i</mi> </msub> </mrow> </mfrac> </mrow>

节点映射到圆形列表之后,接着将数据副本映射到圆形列表,通过对数据副本r进行SHA1散列运算,得到在散列表对应的key值,输出用p表示;

在圆形列表从p开始顺时针方向映射到散列节点集合中,找到距离p最近的数据库节点;将数据存储在找到的节点中。

本发明相比现有技术,具有以下优点:

本发明提出了一种数据库部署方法,在大数据存储的实时性、可扩展性和可靠性等方面均有较好的性能。

附图说明

图1是根据本发明实施例的数据库部署方法的流程图。

具体实施方式

下文与图示本发明原理的附图一起提供对本发明一个或者多个实施例的详细描述。结合这样的实施例描述本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求书限定,并且本发明涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节以便提供对本发明的透彻理解。出于示例的目的而提供这些细节,并且无这些具体细节中的一些或者所有细节也可以根据权利要求书实现本发明。

本发明的一方面提供了一种数据库部署方法。图1是根据本发明实施例的数据库部署方法流程图。

本发明改进的分布式数据存储系统由分布式数据库节点组成,多个分布式数据库节点组成一个数据阵列,多个数据阵列组成分布式数据存储系统。每个数据阵列都有一个主控数据库节点,统一管理数据阵列中的记录信息。当数据阵列中某个分布式数据库节点的记录信息发生变化时,该分布式数据库节点只需将变化的信息发送给主控节点,再由主控节点将该信息广播给数据阵列中其他分布式数据库节点;采用时间片轮转机制通过优化策略选择产生下一个主控节点。

除主控节点外,每个分布式数据阵列还选出备用主控节点,时刻监督主控节点的状态,当主控节点出现意外不能正常工作时,其将取代主控节点,当某个分布式数据库节点上的记录信息发生改变时,只须将该修改信息发送给主控节点,由主控节点负责将该修改信息同步到数据阵列中其它分布式数据库节点上,并将更新结果同样发送到其他数据阵列的主控节点上,其他数据阵列的主控节点将会更新其所属数据阵列的分布式数据库节点,最后使得整个分布式数据存储系统都得到更新。

主控节点具有有效期,给每个分布式数据库节点设定一个权值Wi,当超过有效期时,进行下一轮的选择,选择Wi的最高的前两个数据库作为新的主控节点和备用主控节点,其中权值Wi计算如下:

<mrow> <msub> <mi>W</mi> <mi>i</mi> </msub> <mo>=</mo> <msub> <mi>A</mi> <mi>i</mi> </msub> <mo>*</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>-</mo> <msub> <mi>U</mi> <mi>i</mi> </msub> <mo>)</mo> </mrow> <mo>*</mo> <msub> <mi>M</mi> <mi>i</mi> </msub> <mo>/</mo> <munderover> <mo>&Sigma;</mo> <mrow> <mi>j</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>n</mi> </munderover> <msub> <mi>M</mi> <mi>j</mi> </msub> </mrow>

其中Ai表示第i个节点所在设备的网络带宽容量与响应时间的乘积;

Ui表示第i个节点所在设备的处理器平均响应时间;

Mi表示第i个节点所在设备的剩余存储器空间,n为数据阵列下的数据库节点总数。

分布式数据存储系统的用户终端包括客户请求模块、业务处理模块、传输模块。客户请求模块负责处理用户在终端所提交的数据读写请求,并用于显示分布式数据存储系统对于用户所提交请求的处理结果,同时将用户终端的数据读写请求发送至下层的业务处理模块。业务处理模块用于接收来自客户请求模块的数据读写请求,并以事务的方式对这些请求进行处理,包括记录信息的确认以及数据分块与重组,然后将相关的处理请求信息作为输出发送至下层的传输模块。传输模块负责传输用户终端的数据请求信息、消息确认信息以及返回数据记录的传输,并将传输结果反馈给业务处理模块,让其进行相关事务处理,并将结果发回客户请求模块。

分布式数据存储系统中还包括认证中心,用来保存分布式数据存储系统的网络拓扑初始化配置;监控分布式数据存储系统的网络安全,只在整个分布式数据存储系统的拓扑发生改变时才将新的拓扑信息广播出去,使得各分布式数据库节点都能收到该信息。

分布式数据存储系统的所有记录信息保存在元数据检索表中,元数据检索表包括保留在内存中的LRU列表,存储在磁盘上的寻址表,以及用于根据预定义规则将寻址表的记录进行划分的子组检索表。

每个分布式数据库节点上都维护自身的数据服务,分布式数据库节点通过采用分布式互动控制策略、消息通信协议、负载均衡策略来使自身相对独立地工作。元数据检索表对系统中的元数据进行管理和操作,分别包含以下字段:文件名、组编号、数据库编号、已用存储空间、最大容量、节点地址。根据元数据检索表,系统将相应的数据信息从不同的出口转发出去,并根据表中记录将有效的信息反馈给用户终端。当有用户终端请求到达时,分布式数据存储系统根据预定策略指定特定的分布式数据库节点来处理该请求,通过查找元数据检索表后找到所请求的记录所对应的内部节点地址,从而使用户终端请求直接定位到所要读写的数据所在的分布式数据库节点上,再进行相应操作或读写。

所述数据库的表的存储采用独立分组存储和联合分组存储,在对表进行独立分组时,指定分组数N、分组所依据的分组键属性列AP以及分布系数k。对于需要分组的表的每一条记录,根据分组键AP的值计算出该记录所属的分组ID,然后将该记录存储到该分组对应的一个或多个节点的数据库中;如果表A的分组键AP上是表A的外键,表B的主键BP即表A的分组键AP也是表A与表B连接时使用的连接键,则将跨节点的连接操作转化为本地的连接操作并下推到数据库中执行,此时将两个表的数据联合分组;在对表进行联合分组时,使用基于散列的分组或者基于范围的分组,将数据分组为p个独立的分组,每个分组的数据存储在k个不同节点上;若表B依赖于表A进行联合分组,则表B的分组数等于表A的分组数,且:如果表B的分布系数kB等于表A的分布系数kA,则表B的每个分组的数据库节点就是表A相应分组的数据库节点;如果表B的分布系数kB小于表A的分布系数kA,则表B的每个分组的数据库节点是表B相应分组的数据库节点中取前kB个节点;如果表B的分布系数kB大于表A的分布系数kA,则表B的每个分组的数据库节点除了包含表A的相应分组的数据库节点之外再进行扩展,扩展的(kB-kA)个节点是紧接在原来的节点链之后的节点。

在将表的记录进行独立分组时,利用基于散列的分组或基于范围的分组,基于散列的分组在记录分组键AP上应用合适的散列函数,得到的散列值再对分组数n取模,即得到记录的分组ID;基于范围的分组预先将属性列AP的候选值区间分成多个连续的范围,每个范围对应一个分组,将记录属性列AP的值所在范围作为记录所述的分组。

本发明在缓存调度中为每个记录计算读写时间和读写次数的比值,记为FW值,表示每个记录被读写的概率,将缓存按照FW值分为多个等级。用户终端读写缓存中的记录时,则从最高等级开始自顶向下读写,直到找到记录。当记录的读写请求在缓存中命中时,更新记录的FW值,将FW值与所在等级的阈值比较,若大于阈值,则将该记录修改至上一级的链头位置,若不大于阈值,则将该块添加到该等级的链头位置;当读写请求未命中时,缓存先比较缓存最低等级中最后两个记录的FW值,若最后一个记录的FW值大于倒数第二个记录的FW值时,则将两个记录位置互换,然后将最后一个记录置换出去,再将倒数第二个记录的FW值重置。

具体地,FW值定义为:FW=F(x)+W(y,R)

其中F(x)=(1/p)x,x=t-tlast,即当前时间减去最后一次读写缓存的时间,权值调整参数p>1;

W(y,R)=(y+a)R

其中y表示记录的读写次数,R为布尔值,表示操作类型为读还是写,a为大于1的微调常数。

为提高元数据检索表的缓存命中率,通过在日志中提取特征值,得出每个记录的下一记录,并以此构造出DAG图,最后根据DAG图来划分为组,组中包括当前记录和后继记录,当需要某条记录调入内存中时,就将该记录所在的组同时调入内存中。LRU列表是元数据检索表的固定大小的子集,元数据检索表中包含所有存入分布式数据存储系统的记录;子组检索表用于根据记录预取的规则,将元数据检索表中的记录划分为子组,根据子组编号,查找该子组的所有记录。LRU列表是以子组为单位来进行记录替换的,当LRU列表中记录未命中时,通过查找要读写的记录所在组,然后将该组中所有记录通过数据库缓存调度算法调入缓存列表中,维持子组检索表。

如果用户终端的读写操作请求所请求的记录不在LRU列表中,通过查找位于磁盘中的元数据检索表并且该块已经划分,则将该块所在子组全部调入LRU列表中。如果所请求的记录不在LRU列表中,通过查找位于磁盘中的元数据检索表找到该记录,但该记录没有划分,则将该记录送入子组模块中进行划分。如果所请求的记录不在LRU列表中,通过查找位于磁盘中的元数据检索表也没有发现该记录,若该请求为读操作,则向用户终端返回未找到;若该请求为写操作,则在LRU列表中新建一条记录,并为该记录分配一个新的子组ID。

基于DAG图的记录获取包含以下步骤:

1.查找记录的特征值,包括名称、下一记录、读写时间、初始和结尾时间戳;提取从时刻t0开始,时间段T内每个记录的下一个块si以及最后一次读写时间ti

2.通过每个块的特征值,计算出下一记录,具体包括根据每个记录的后继序列,统计出所有候选记录在序列中所出现的次数,计算出各自所占比率pi,定义F(x):

F(x)=α×pi+β×(ti-t0)/T

其中α和β分别为块读写次数pi和读写时间ti的权值因子,取MAX(F(x))的候选记录作为当前块的下一记录;

3.通过各块与下一记录的映射关系,生成一个DAG图;

4.根据DAG图将记录进行划分,即依次从各顶点开始遍历,设定每个组中最多包含的记录数阈值n,当遍历遇到以下情况中时,将其分为一组:遍历经过的顶点数不大于n;而路径形成未形成环路并且没有下一个顶点。

设置一个标记数组flag[n],该数组用于判断记录是否已经调入内存或者是否可以换出内存,每个记录在flag[n]数组中都对应有一个标记值,初始化为0,迭代地与其所在组的子组ID进行同或运算,在磁盘中时,判断记录在flag[n]数组中所对应的值是否为0,以此推断出该记录是否已经进入内存;在内存中时,同样只需判断记录在flag[n]数组中所对应的值是否为0,来判断该记录是否可以作为其他组的成员留在内存中,下面是具体的操作步骤。

(1)当某一组将要替换到内存中时,在磁盘中查找该组的子组ID,找到该组所对应的记录,记为A、B、C;

(2)查找标记数组中的flag[A]、flag[B]、flag[C],依次判断其是否为0,若flag[A]为0,表示该记录还未调入过内存中,将记录A调入内存中,若不为0,则不重复调用;

(3)将该组的子组ID依次与flag[A]、flag[B]、flag[C]进行同或运算,并利用运算结果更新flag[A]、flag[B]、flag[C];

(4)假设某一组有记录D、E、F需要换出内存时,在内存中将该组的子组ID依次与flag[D]、flag[E]、flag[F]进行同或运算,并利用运算结果更新flag[D]、flag[E]、flag[F];

(5)依次判断flag[D]、flag[E]、flag[F]是否为0,若为0,表示该记录对应的所有组都不在内存中,可以换出,若不为0,该记录暂不替换出内存。

子组检索表将元数据检索表中的记录划分为记录子组,每个子组以链表形式表示,子组ID就是链头文件在元数据检索表中的子组ID,将该检索表以子组ID为键,索引项信息为值构建散列表,当需要调入某组记录时,首先在元数据检索表中查询该记录所对应的子组ID,然后在子组检索表中根据散列函数进行查找,再将该组调入内存中。当超过预设超时阈值时,将所有记录的子组ID清零,进行重新分组。

所述分布式数据存储系统的用户终端的请求模块还用于确定出的读写请求执行顺序。请求模块包括数据收发与排序两个单元。数据收发单元将存储系统传来的事务执行请求接收到用户终端中,并将有序的事务发送给用户终端的业务处理模块进行执行。排序单元用来对接收到读写请求进行排序操作,在用户终端中协商出一个事务执行队列。为了实现对存储系统数据的接收,在传输模块中设置专门的传输监听进程,监听进程随着整个存储系统一起初始化,并一直处于监听状态;当存储系统传递的事务数量符合监听进程中预先设置的策略时,则将接收的参数传递给用户终端进行处理。

业务处理模块进一步包括原子事务、加锁与缓存管理三个单元。加锁单元在对读写请求施加排他锁,即在事务执行前将事务所需的全部资源提前加锁。缓存管理单元将底层数据库中的数据存储到缓存中。并将本地缓存中的数据发送给其他用户终端的缓存。原子事务单元通过创建存储过程,对接收到的读写请求进行执行,消除数据查询的异常中断。在业务处理模块同样也设置一个业务处理监听进程,当传输模块对接收到的读写请求进行排序之后,调用业务处理监听进程,利用业务处理监听进程将有序的读写请求传递给业务处理模块。

在读写请求排序过程中,用户终端在接收到传来的读写请求之后,将其传递给存储系统进行处理。每个存储系统接收到读写请求之后,分别创建事务通道对象,然后将读写请求封装成触发事件传递给事务通道对象,由事务通道对象负责具体触发事件的处理,具体分为三个步骤:

(1)事务通道对象在接收到触发事件之后,对触发事件中指针类型进行判断后,然后判断该数据库是否是主控节点。如果是主控节点则将其发送给其他所有数据库;如果不是主控节点,则更新本地触发事件的读写请求时间;

(2)非主控节点对接收到的触发事件进行处理,如果读写请求时间更新为触发事件中的读写请求时间相同,则表示是同一周期接收到的读写请求,然后每个非主控节点发送读写应答返回给主控节点,表明自己同意该读写请求序列。如果不相同则发送拒绝应答;

(3)主控节点对其他数据库传来的触发事件进行监听,判断,并发送有序读写请求,如果与主控节点收到的读写应答的请求时间不同则直接抛弃,如果相同,则将主控节点中应答数量增1。当该数量超过全部数据库数量的一半以上时,则确定读写请求已经完成排序。主控节点将缓存中的读写请求取出,并将其交给事务传输模块的存储系统进行处理,将最终排序后的读写请求发送给所有非主控节点的数据库,从而完成排序。

其次,为使用户以最快的速度,从最接近用户的地方获得所需的信息,分布式数据库节点采用以下副本拷贝方法,首先对数据库节点状态进行估计,然后将数据库节点映射到基于散列构造的圆形列表,将副本映射到圆形列表;根据预设策略存储到某一数据库节点上,完成副本部署拷贝。

在构造的圆形列表中,每个数据库节点i具有权值Vi

Vi=ζLi+(1-ζ)Dij,(1<i<n,n为数据阵列中的节点数)

Li=(Ai-Amin)/(Amax-Amin)

Dij=(dij-Dmin)/(Dmax-Dmin)

Ai表示第i个节点所在设备的网络带宽容量与响应时间的乘积,Amax与Amin分别为Ai的最大值和最小值;

dij表示第i个节点到第j个节点的网络距离,Dmax与Dmin分别为dij的最大值和最小值;

ζ是调节因子,用于调节节点负载Li和节点间距离参数Dij在权值估计中的比重。

通过散列运算,得到每个数据库节点产生的散列节点在圆形列表中的映射值,其映射值的集合用HG表示。每个数据库节点i产生的散列节点集合为HGi,包含的散列节点个数为v1*gwi/gwmin

其中gwmin为节点权值集合中最小的权值,v1为有最小权值的节点产生的散列节点个数,并且每个节点占有的权值为:

<mrow> <msub> <mi>gw</mi> <mi>i</mi> </msub> <malignmark/> <mo>=</mo> <mfrac> <msub> <mi>V</mi> <mi>i</mi> </msub> <mrow> <munderover> <mo>&Sigma;</mo> <mrow> <mi>i</mi> <mo>=</mo> <mn>1</mn> </mrow> <mi>n</mi> </munderover> <msub> <mi>V</mi> <mi>i</mi> </msub> </mrow> </mfrac> </mrow>

节点映射到圆形列表之后,接着将数据副本映射到圆形列表,通过对数据副本r进行SHA1散列运算,得到在散列表对应的key值,输出用p表示。

在圆形列表从p开始顺时针方向映射到散列节点集合中,找到距离p最近的数据库节点;将数据存储在该节点中。

综上所述,本发明提出了一种数据库部署方法,在大数据存储的实时性、可扩展性和可靠性等方面均有较好的性能。

显然,本领域的技术人员应该理解,上述的本发明的各模块或各步骤可以用通用的计算系统来实现,它们可以集中在单个的计算系统上,或者分布在多个计算系统所组成的网络上,可选地,它们可以用计算系统可执行的程序代码来实现,从而,可以将它们存储在存储系统中由计算系统来执行。这样,本发明不限制于任何特定的硬件和软件结合。

应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。

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