一种基于库复制的分布式存储方法与流程

文档序号:12494356阅读:236来源:国知局

本发明属于计算机和数据库领域,尤其涉及一种基于库复制的分布式存储方法。



背景技术:

现在,计算机在各个领域都得到了深入应用,各行各业都使用计算机来存储和处理各种数据,而数据库是计算机领域中最常见的数据存储设施,常常用来存储重要的数据。但是,众所周知,由于各种原因,数据库可能会出现故障,甚至完全被损毁,从而导致数据丢失;因而现在在设计重要的数据库系统时,通常都会考虑对数据库进行备份,以便在数据库丢失数据后,可以使用备份恢复数据库。

现有技术中,一种常见的方法是在异地对原数据库进行完全备份,一旦原数据库损坏,则从完全备份中恢复到原数据库,这个方式的缺点是在恢复时,整个系统需要暂停运行,并且恢复速度很慢。另一种方法是使用多台服务器进行镜像备份,如果一台出现故障,则使用其他服务器进行恢复,但是,一般情况下,一台机器对外提供的数据吞吐量是有限的,如果采用这种机器镜像即几台机器上的数据完全一致的方式,修复大数据量的数据库时耗时也会很长,如果还需要同时考虑到提供正常服务,则修复的时间还会大大增加。

对于现有技术的上述缺点,还没有一种完善的解决方案。



技术实现要素:

为了解决现有技术中的上述问题,本发明提出了一种基于库复制的分布式存储方法。

本发明采用的技术方案如下:

一种基于库复制的分布式存储方法,其特征在于,该方法使用n台存储服务器存储数据库,包括以下步骤:

(1)将数据库切分为多个子库;

(2)设置冗余服务器的数量t;

(3)在n台存储服务器中任取t台,组成一个服务器,共得到个服务器组,记这些服务器组为S1,S2,……,SK,由这些服务器组构成一个集合S={Si,1≤i≤K}。

(4)计算每一台存储服务器当前的存储代价;

(5)对于集合S中的每个服务器组,计算服务器组的存储代价,所述服务器组的存储代价是该服务器组中所有存储服务器的存储代价之和;

(6)对集合S中的服务器组,按照服务器组的存储代价进行排序,将存储代价最小的服务器组作为一个选择组,并从集合S中删除;

(7)重复步骤4-6,一直到获取了m个选择组;

(8)每个选择组分别存储一个子库,即将选择组中的每一台存储服务器都存储相应子库的一个复制。

进一步地,该方法还包括:

(9)对于不在任何一个选择组中的存储服务器,使用该存储服务器存储所有的子库。

进一步地,所述步骤(4)包括以下步骤:

(4.1)设n台存储服务器为A1,A2,……,An;首先计算Ai(1≤i≤n)的数据代价Di,即Di=Ti/Li;其中,Ti是存储服务器Ai到接口服务器的传输延迟时间,Li是存储服务器Ai本身的数据吞吐率;

(4.2)计算存储服务器Ai的存储代价Ci=FiDi,其中,Fi是Ai在已经获取的选择组中出现的次数。

进一步地,所述子库的数量不少于3个。

进一步地,所述存储服务器的数量n、子库的数量m和冗余服务器的数量t,满足n≥mt/2。

进一步地,当有一台存储服务器丢失数据时,根据该存储服务器上所存储的子库,选择相应的存储服务器为其恢复数据。

本发明的有益效果包括:保证了数据库系统的冗余度,提高了数据的安全性,解决了数据高效自动修复的问题。

【附图说明】

此处所说明的附图是用来提供对本发明的进一步理解,构成本申请的一部分,但并不构成对本发明的不当限定,在附图中:

图1是本发明方法所应用的系统结构图。

【具体实施方式】

下面将结合附图以及具体实施例来详细说明本发明,其中的示意性实施例以及说明仅用来解释本发明,但并不作为对本发明的限定。

参见附图1,其示出了本发明分布式存储方法所适用的系统结构,该系统包括多台存储服务器,用于分布式存储一个数据库。所有的存储服务器都通过网络互相连接,相互之间可以互相传输数据,同时各存储服务器接受接口服务器的管理和调度,并通过接口服务器向外部提供数据库服务。所述网络可以是一个内部的局域网,使用局域网的优点是相互之间传输数据快;但是,考虑到异地容灾,该网络也可以是广域网、互联网。

基于上述结构,下面详细说明本发明的基于库复制的分布式存储方法:

(1)将整个数据库切分成多个子库。

具体的切分方式取决于数据库内所存储的数据,以及数据库的组织形式。例如,可以基于数据表进行切分,即将多个数据表构成一个子库;也可以根据存储的数据量进去切分,使得每个子库所存储的数据量基本相同。考虑到分布式存储,子库的数量可以根据具体情况所确定,但是一般不少于3个。

(2)设置冗余服务器的数量t。

所述冗余服务器的数量,指的是存储同一个子库的存储服务器的数量,假设共有n台存储服务器,则每一个子库都同时存储于其中的t台存储服务器中,这意味着即使其中有t-1台存储服务器故障,凭借剩余的1台存储服务器,该子库也能够得到恢复。为了保证冗余度,一般要求t≥3。另外,优选的,为了使得分布式存储的优势更好地发挥,数据分布平均,应当满足n≥mt/2,其中m是子库的数量。

(3)在n台存储服务器中任取t台,组成一个服务器组,通过排列组合,一共可以得到个服务器组,记这些服务器组为S1,S2,……,SK,那么可以获得由这些服务器组所构成的一个集合S={Si,1≤i≤K}。

例如,如果t=3,一共有5台存储服务器,则通过排列组合,服务器组一共有个,即|S|=10。这一步骤实际上给出了同一子库的t个冗余服务器的所有可能的组合。

(4)计算每一台存储服务器当前的存储代价,具体的计算方法在后面说明。

所述存储代价实际上是存储服务器存储数据子库所要耗费的代价,其反应了该存储服务器存储数据的效率。

(5)对于集合S中的每个服务器组,计算服务器组的存储代价,所述服务器组的存储代价是该服务器组中所有存储服务器的存储代价之和。

所述存储代价之和反映了一个子库要存储到该服务器所要花费的总的存储代价,通过该存储代价和,可以衡量不同服务器组的优劣。

(6)对集合S中的服务器组,按照服务器组的存储代价进行排序,将存储代价最小的服务器组作为一个选择组,并从集合S中删除。

(7)重复步骤4-6,一直到获取了m个选择组。

通过步骤4-6,选出了一个相对最优解,即将m个子库在冗余度t下存储于n台存储服务器的相对最优解,通过这一相对最优解,整个数据库的分布式存储效率得到了保证。

(8)每个选择组分别存储一个子库,即将选择组中的每一台存储服务器都存储相应子库的一个复制。

m个选择组与m个子库一一对应,因此上述步骤实质上将m个子库分别存储在m个存储代价最小的服务器组中,并且每个子库都有t个冗余,即使其中的t-1台服务器故障,也能够继续提供服务,并在故障修复后提供恢复数据。一方面达到了分布式存储的目的,另一方面也达到了冗余备份的目的。

(9)对于不在任何一个选择组中的存储服务器,使用该存储服务器存储所有的子库。

可能由于某些存储服务器存储代价过大,或者由于存储服务器数量很大,导致有一些存储服务器没有在前面的步骤中被选择存储子库,为了不浪费其存储能力,本发明使用这些服务器存储所有的子库,作为进一步的分布式存储的备份。

前述步骤(4)中,需要针对每一台存储服务器计算当前的存储代价,存储代价可以有多种计算方式,下面是依据本发明的一个实施例的计算方式,但是本领域技术人员可以采用任意一种可行的其他计算方式,本发明对此不作限制。

(4.1)设n台存储服务器为A1,A2,……,An;首先计算Ai(1≤i≤n)的数据代价Di,即Di=Ti/Li。其中,Ti是存储服务器Ai到接口服务器的传输延迟时间(单位为秒),Li是存储服务器Ai本身的数据吞吐率(单位为MB/秒)。

如果各台存储服务器在同一个局域网中,则所述传输延迟时间应该是相同的,这种情况下可以省略该时间的计算,直接用一个固定数值代替。

(4.2)计算存储服务器Ai的存储代价Ci=FiDi

其中,Fi是Ai在已经获取的选择组中出现的次数。例如,已经获取的选择组为S1={A1,A2,A3}和S2={A1,A3,A4},那么当前的F1=2,即A1在已获取的两个选择组中出现2次,同理有F2=1,F3=2。

所述Fi反映了存储服务器Ai中已有的子库数量,每个子库都会占用存储空间和数据传输带宽,导致存储服务器负载增加,因而导致了存储代价的增加。

基于上述基于库复制的分布式存储方法,在数据库的管理上,同一个子库在不同存储服务器上都是同步的,因此如果n台存储服务器中有一台丢失了数据,可以使用其他的存储服务器为其恢复数据,例如,如果丢失数据的服务器上本来有k个子库,那么就可以同时使用另外的相应于k个子库的k台存储服务器为其恢复数据。

以上所述仅是本发明的较佳实施方式,故凡依本发明专利申请范围所述的构造、特征及原理所做的等效变化或修饰,均包括于本发明专利申请范围内。

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