facebook / facebook/zstd

Speedup scan speed for '--patch-from' via rolling hashes

未关闭
#2,189 1 条评论 3 个 reaction 已指派 1 人 已被 @daniellerozenblit 认领 在 GitHub 查看
optimization
主要语言
C
星标
27.9k
派生
2.6k
平均合并
1 天 3 小时
30 天内合并 PR
8

描述

IPFS has the ability to dedup blocks between different types of files. This functionality is based on a rolling hash algorithm.

You can either select rabin or buzzhash for this task (in IPFS). Rabin is kind of slow, but buzzhash is quite fast.

The rolling hash would allow to 'prescan' both files, get some cut marks and run some fast cryptographic hash algorithm over the chunks, like blake2b.

I think both operations are much cheaper than pattern matching. This way you can skip all pattern matching attempts which are on both sides (A and B) inside the known equal blocks.

The first layer of patching would just generate a lengths+offset+move triple, which can copy the blocks from the original file into a sparse file as first patching operation.

The pattern matching rules could be used on top of that, completing the gaps of the output file.

_Originally posted by @RubenKelevra in https://github.com/facebook/zstd/issues/2063#issuecomment-616705733_

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。