我尝试将输入文件拆分为固定长度的块并单独压缩它们,但没有成功。
如果您只更改字节而不移动它们,这应该工作 NP。
也就是说,如果你分割"The hog crawled under the high fence"
成固定大小的块["The hog ", "crawled ", "under th", "e high f", "ence"]
,然后独立地压缩它们,那么将“hog”更改为“dog”将是 rsync 友好的,因为剩余块的压缩版本["crawled ", "under th", "e high f", "ence"]
仍然是相同的。
另一方面,如果您移动字节,例如将“hog”替换为“caterpillar”,那么拆分将不再有帮助,因为块["The cat", "erpillar", " crawled", " under t", "he high ", "fence"]
现在不同了,它们的压缩版本也不同。
Rsync 对前者有帮助,但对后者没有帮助。
如果你想要任意修改,你需要一个智能的块分割算法,它倾向于文件的某些点。例如,如果您将"The hog crawled under the high fence"
空间拆分为"The ", "hog ", "crawled ", "under ", "the ", "high ", "fence"
,则将“hog”替换为“caterpillar”只会更改一个压缩块,从而使 rsync 不会传输其余的块。
PS 看起来LBFS 使用了这样的块拆分方案:“通过在文件上滑动一个 48 字节的窗口并计算每个窗口的 Rabin 指纹。当指纹的低 13 位为零时,LBFS 将这 48 个字节称为断点并结束当前块并开始一个新块“