流rdiff - delta差分?
我有一个使用rdiff进行在线备份的产品。目前发生的是:
将文件复制到临时区域(因此在我们处理文件时,文件不会消失或被修改)
散列原始文件,并计算rdiff签名(用于差异差分)
计算rdiff delta差异(如果我们没有先前版本,则跳过此步骤)
压缩&加密产生的差异
目前,这些阶段彼此明显不同。最终结果是我们多次遍历文件。对于小文件,这不是什么大问题(特别是给定磁盘缓存),但对于大文件(10或甚至100的GB),这是一个真正的性能杀手。
我想将所有这些步骤合并为一个读/写传递。
为此,我们必须能够以流式方式执行上述所有步骤,同时仍然保留所有“输出” - 文件散列,rdiff签名,压缩和放大。加密差值差异文件。这将需要从源文件中读取一个数据块(例如,100k?),然后在内存中迭代文件以更新散列,rdiff签名,执行增量差异,然后将输出写入压缩/加密输出流。我们的目标是大大减少我们所做的磁盘颠簸。
目前,我们使用rdiff.exe(它是底层librsync库之上的一个薄层)来计算签名并生成二进制增量。这意味着这些是在单独的过程中完成的,并且以一次性而非流式方式完成。
如何使用librsync库来实现我需要的功能?
没有找到相关结果
已邀请:
1 个回复
习让休堂溯
如果在程序中使用库进行压缩/加密,则需要选择支持流操作的库。 *如果数据在文件中移动,则会失去很多效率。如果有人将100 MB预先设置为10 GB文件,rdiff将生成大约100 MB的增量文件。 rdiff一次以100 MB或更少的块完成,将产生大约10 GB的delta。 200 MB的块将产生大约5 GB的增量,因为每个块中只有一半的数据来自旧版本文件的相应块。