数据存储系统和数据读写方法与流程

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

技术特征:

1.一种数据存储方法,其特征在于,应用于包括中心节点和去重节点的数据存储系统,所述数据存储方法,包括:

所述中心节点根据预设策略将每个桶(Bucket)分配到对应的去重节点;

所述中心节点根据Bucket与去重节点的对应关系创建路由表,并同步所述路由表到每个去重节点;

所述去重节点根据所述路由表,存储每个所述分配到的Bucket所对应的指纹信息和所述指纹信息代表的数据块。

2.如权利要求1所述的数据存储方法,其特征在于,所述去重节点根据所述路由表,存储每个所述分配到的Bucket所对应的指纹信息和所述指纹信息代表的数据块,包括:

所述去重节点为每个所述分配到的Bucket分别创建对应的容器(Container)文件;

所述去重节点在每个所述分配到的Bucket中保存对应的指纹信息,在与每个所述分配到的Bucket对应的Container文件中保存所述指纹信息代表的数据块。

3.如权利要求2所述的数据存储方法,其特征在于,

所述去重节点判断所述Container文件的大小是否大于预设阈值;

当所述Container文件的大小大于预设阈值时,所述去重节点将所述Container文件归档至后台服务器。

4.如权利要求1所述的数据存储方法,其特征在于,所述中心节点根据预设策略将每个Bucket分配给对应的去重节点,包括:

所述中心节点将每个Bucket分配到多个对应的去重节点,在所述多个对应的去重节点中确定一个主节点和至少一个备用节点。

5.如权利要求1或4所述的数据存储方法,其特征在于,

所述中心节点判断每个去重节点是否可用,或者是否增加了新的去重节点;

当判断出某个去重节点不可用,或者增加了新的去重节点时,所述中心节点重新分配所述每个Bucket;

所述中心节点更新所述路由表并同步到每个去重节点;

所述去重节点根据所述更新后的路由表进行数据迁移。

6.如权利要求5所述的数据存储方法,其特征在于,所述去重节点根据所述更新后的路由表进行数据迁移,包括:

所述主节点根据所述更新后的路由表发起所述数据迁移。

7.如权利要求5所述的数据存储方法,其特征在于,所述当判断出某个去重节点不可用时,所述中心节点重新分配所述每个Bucket,包括:

当判断出所述主节点不可用时,所述中心节点从所述至少一个备用节点中重新确定出一个主节点;

所述去重节点根据所述更新后的路由表进行数据迁移包括:

所述重新确定的主节点根据所述更新后的路由表发起所述数据迁移。

8.如权利要求1所述的数据存储方法,其特征在于,每个所述去重节点包括一个指纹信息库,所述指纹信息库是存储于固态硬盘上的布谷鸟哈希映射表,包括所述去重节点的每个Bucket所对应的指纹信息和所述指纹信息代表的数据块的存储信息。

9.如权利要求8所述的数据存储方法,其特征在于,所述固态硬盘上同时运行M个布谷鸟哈希映射表,并同时使用N个布谷鸟哈希函数;其中,M×N=128。

10.如权利要求9所述的数据存储方法,其特征在于,所述固态硬盘上同时运行32个布谷鸟哈希映射表,并同时使用4路布谷鸟哈希函数。

11.一种数据读写方法,其特征在于,包括:

将数据切分为多个数据块并分别计算每个数据块的指纹信息;

确定所述每个数据块的指纹信息所对应的Bucket;

根据从中心节点获取的路由表,确定与所述Bucket对应的去重节点;

发送指纹查询请求至与所述Bucket对应的去重节点,所述指纹查询请求 包括数据块的指纹信息;

接收到与所述Bucket对应的去重节点返回的未查询到的指纹信息;

上传所述未查询到的指纹信息及其代表的数据块至与所述Bucket对应的去重节点。

12.如权利要求11所述的方法,其特征在于,所述确定所述每个数据块的指纹信息所对应的Bucket包括:

将所述指纹信息与所述Bucket的总数量进行取模运算,根据所述取模运算的结果确定所述指纹信息所对应的Bucket。

13.如权利要求11所述的方法,其特征在于,所述方法还包括:

当所述未查询到的指纹信息及其代表的数据块全部上传完毕时,上传所述数据的映射文件至去重节点,所述映射文件包括所述数据的每个数据块的指纹信息,所述每个数据块的指纹信息按照数据块的切分顺序排列。

14.如权利要求13所述的方法,其特征在于,所述上传所述数据的映射文件至去重节点,包括:

将所述映射文件切分为多个数据块并分别计算映射文件的数据块的哈希值;

确定所述映射文件的数据块的哈希值所对应的Bucket;

根据所述路由表确定与所述映射文件的数据块的哈希值对应的Bucket所对应的去重节点;

上传所述映射文件的数据块和相应的哈希值至与所述映射文件的数据块的哈希值对应的Bucket所对应的去重节点。

15.如权利要求14所述的方法,其特征在于,所述将所述映射文件切分为多个数据块包括:

将所述映射文件的头信息切分为所述多个数据块中的第一个数据块;所述映射文件的头信息包括所述映射文件的大小、所述多个数据块的总数量等信息。

16.如权利要求13所述的方法,其特征在于,所述方法还包括:

从去重节点获取所述数据的映射文件;

根据所述映射文件中的指纹信息从去重节点获取所述数据的每个数据块;

按照所述每个数据块的指纹信息在所述映射文件中的顺序拼接出所述数据。

17.如权利要求16所述的方法,其特征在于,所述从去重节点获取所述数据的映射文件包括:

根据所述映射文件的名称和数据块序号从去重节点获取所述映射文件的每个数据块;

将所述映射文件的每个数据块拼接为所述数据的映射文件。

18.如权利要求11所述的方法,其特征在于,所述根据从中心节点获取的路由表,确定与所述Bucket对应的去重节点包括:

当首次存储数据时,从所述中心节点获取路由表;

根据从中心节点获取的路由表,确定与所述Bucket对应的去重节点。

19.如权利要求18所述的方法,其特征在于,所述根据从中心节点获取的路由表,确定与所述Bucket对应的去重节点还包括:

发送请求包至与所述Bucket对应的去重节点;

接收与所述Bucket对应的去重节点返回的响应包,所述响应包包括路由表的版本信息;

判断所述响应包中的路由表的版本信息与所述从中心节点获取的路由表的版本信息是否相同;

当所述响应包中的路由表的版本信息与所述与从中心节点获取的路由表的版本信息相同时,根据所述从中心节点获取的路由表确定与所述Bucket对应的去重节点;

当所述响应包中的路由表的版本信息与从中心节点获取的路由表的版本信息不相同时,从所述中心节点获取更新后的路由表;根据所述更新后的路由表重新确定与所述Bucket对应的去重节点。

20.一种数据读写方法,其特征在于,包括:

中心节点发送路由表至客户端,所述路由表包括Bucket与去重节点之间的对应关系;

去重节点接收到所述客户端的指纹查询请求,所述指纹查询请求包括与所述去重节点分配到的Bucket对应的指纹信息;

所述去重节点对所述指纹信息进行查询,将未查询到的指纹信息返回至所述客户端;

所述去重节点接收到所述客户端上传的所述未查询到的指纹信息及其所代表的数据块。

21.如权利要求20所述的方法,其特征在于,所述方法还包括:

所述去重节点在所述分配到的Bucket中保存所述未查询到的指纹信息,在与所述分配到的Bucket对应的Container文件中保存所述数据块,

所述去重节点向所述客户端返回所述数据块保存成功的消息。

22.如权利要求21所述的方法,其特征在于,所述去重节点向所述客户端返回所述数据块保存成功的消息之前,所述方法还包括:

所述去重节点将所述未查询到的指纹信息及其代表的数据块备份到备用节点。

23.如权利要求21所述的方法,其特征在于,所述方法还包括:

所述去重节点保存所述客户端上传的映射文件的数据块和相应的哈希值。

24.如权利要求23所述的方法,其特征在于,所述保存所述客户端上传的映射文件的数据块和相应的哈希值包括:

在所述对应的Bucket所对应的Container文件中,保存所述映射文件的数据块;

在所述对应的Bucket中,保存所述映射文件的数据块的哈希值以及第一存储信息。

25.如权利要求24所述的方法,其特征在于,所述第一存储信息包括: 保存所述映射文件的数据块的Container文件的名称,所述映射文件的数据块在所述Container文件中的偏移量和所述映射文件的数据块的大小。

26.如权利要求23所述的方法,其特征在于,所述方法还包括:

所述去重节点接收到所述客户端获取所述映射文件的数据块的请求;

所述去重节点发送所述映射文件的数据块至所述客户端;

所述去重节点接收到所述客户端获取所述映射文件中的每个指纹信息所代表的数据块的请求;

所述去重节点发送所述每个指纹信息所代表的数据块至所述客户端。

27.如权利要求26所述的方法,其特征在于,所述去重节点发送所述每个指纹信息所代表的数据块至所述客户端包括:

所述去重节点根据所述指纹信息确定所述数据块的第二存储信息,所述第二存储信息包括保存所述数据块的Container文件的名称,所述数据块在所述Container文件中的偏移量和所述数据块的大小;

所述去重节点根据所述Container文件的名称判断所述Container文件是否已归档至后台服务器;

当所述Container文件已归档至后台服务器时,所述去重节点根据所述数据块在所述Container文件中的偏移量和所述数据块的大小从所述后台服务器获取所述数据块并发送至所述客户端;

当所述Container文件仍保存在本地时,所述去重节点根据所述数据块在所述Container文件中的偏移量和所述数据块的大小从本地获取所述数据块并发送至所述客户端。

28.如权利要求20所述的方法,其特征在于,所述中心节点发送路由表至客户端包括:

当所述客户端首次存储数据时,所述中心节点接收到所述客户端获取路由表的请求;

所述中心节点发送路由表至所述客户端。

29.如权利要求28所述的方法,其特征在于,所述中心节点发送路由 表至客户端还包括:

所述去重节点接收到所述客户端的请求包:

所述去重节点发送响应包至所述客户端,所述响应包包括所述去重节点保存的路由表的版本信息;

当所述客户端保存的路由表的版本信息与所述所述去重节点保存的路由表的版本信息不一致时,所述中心节点接收到所述客户端的路由表请求;

所述中心节点发送更新后的路由表至所述客户端。

30.如权利要求20所述的方法,其特征在于,所述去重节点对所述指纹信息进行查询,将未查询到的指纹信息返回至所述客户端包括:

所述去重节点通过布隆过滤器判断所述指纹信息是否存在;

当通过布隆过滤器判断出所述指纹信息不存在时,确定所述指纹信息为未查询到的指纹信息;

当通过布隆过滤器判断出所述指纹信息存在时,在指纹信息库中查询所述指纹信息是否存在;

当在指纹信息库中查询到所述指纹信息时,确定所述指纹信息已存在;

当在指纹信息库中未查询到所述指纹信息时,确定所述指纹信息为未查询到的指纹信息。

31.一种数据存储系统,其特征在于,包括:中心节点和一个或多个去重节点,其中,

所述中心节点,用于根据预设策略将每个桶(Bucket)分配到对应的去重节点,并根据Bucket与去重节点的对应关系创建路由表,并同步所述路由表到每个去重节点;

所述去重节点,用于根据所述路由表,存储每个所述分配到的Bucket所对应的指纹信息和所述指纹信息代表的数据块。

32.一种用于数据读写的客户端,其特征在于,包括:

切分计算模块,用于将数据切分为多个数据块并分别计算每个数据块的指纹信息;

桶确定模块,用于确定所述每个数据块的指纹信息所对应的Bucket;

节点确定模块,用于根据从中心节点获取的路由表,确定与所述Bucket对应的去重节点;

请求发送模块,用于发送指纹查询请求至与所述Bucket对应的去重节点,所述指纹查询请求包括数据块的指纹信息;

信息接收模块,用于接收到与所述Bucket对应的去重节点返回的未查询到的指纹信息;

数据上传模块,用于上传所述未查询到的指纹信息及其代表的数据块至与所述Bucket对应的去重节点。

33.一种用于数据读写的系统,其特征在于,包括:中心节点和去重节点,其中,

所述中心节点,用于发送路由表至客户端,所述路由表包括Bucket与去重节点之间的对应关系;

所述去重节点,用于接收到所述客户端的指纹查询请求,所述指纹查询请求包括与所述去重节点分配到的Bucket对应的指纹信息;对所述指纹信息进行查询,将未查询到的指纹信息返回至所述客户端;接收到所述客户端上传的所述未查询到的指纹信息及其所代表的数据块。

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