在客户端,每个侍归档的文件首先会通过特定的文件分块算法被切割成一些互不重叠的变长数据块,如Rabinfingerprinting、metadataawarechunking。
每个数据块以加密的哈希算法(如MD5,SHAl等)对它们的内容进行计算,所得到的哈希值作为它们的标志符区分。文件的属性信息,以及文件包含的所有的块的标志符将被记录到文件属性表File_Attibutes_Table中去。
同时,客户端将所有块的元数据发送给MDS,并向MDS请求一个特定的iSN(代表性iSN,简称R-ISN)来储存数据。MDS到元数据后,通过比较块ID来发现系统中是否有重复的块。系统中已经存在的块将被丢弃;对于系统中不存在的块,MDS同时指定一个ISN客户端作为R-ISN,昔诉它有数据要发送给它,并通知客户端将数据发送给R-ISN。
当R-ISN收到客户端发送来的数据块后,先将这些数据块打包成定长对象并编码,然后把同一个冗余组中的对象分布到相应的lSN上去。如果lSN上有足够多的非易失RAM对象写操作可以异步完成,以提高响应速度和系统的吞吐率。
在完成对象分布后、R-ISN将三元组返回给MSD。其中group_ID是它所属的冗余组的标志符,object_ID_list是对象的列表,ISN_ID_list则是这些对象所在的lSN的ID的列表。MDS更新索引表,维护元数描的一致性。
最后,如果配置了同步模式,MDS报告客户端表明实际文件的归档已经完成。客户端可以缓存三元组以减少处理未来请求时和MDS下的交互量。嵌入R-ADMAD机制下文件归档过程的算法锚述如图4.21所示
应用需要从R-ADMAD系统中读取文件全部或者一部分的内容时,将执行以下四个步骤:
(1)通过查询MDS中的File_Attibutes_Table将文件的偏移量和长度换算成一系列Chunk_ID:
(2)对于读取文件所需的每个chunk_ID,从Chunk_object_table中查找存储这个chunk所在的对象列表。
(3)对干对象列表的每个对象,通过object_table,找到存储该对象的对象组,并根据对象组的冗余组配置,以及对象在对象组中的编号,找到存储该对象的ISN。
(4)利用ISN提供的面向对象的接口,根据文件块在对象申的偏移量,将对象申相关的内容谈到缓冲区。
这个操作严重依赖系统的吞吐率,需要进行进一步优化。为了减少系统的负担,某些对元数据或者文件属性的操作,如关键字搜索、获取属性等,可以直接通过访问MDS完成,而无须访问那些存储在ISN中的实际文件内容。