#merkle #chunk #rabin #dedup

cdc

用于对数据流进行内容定义分块(CDC)的库

3个不稳定版本

使用旧的Rust 2015

0.1.1 2022年2月27日
0.1.0 2017年9月9日
0.0.2 2016年9月25日

#823 in Rust模式

每月 38 次下载

MIT 许可证

21KB
481

cdc

一个用于在数据流上进行内容定义分块(CDC)的库。使用泛型迭代器实现,非常容易使用。

示例

  let reader: BufReader<File> = BufReader::new(file);
  let byte_iter = reader.bytes().map(|b| b.unwrap());

  // Finds and iterates on the separators.
  for separator in SeparatorIter::new(byte_iter) {
    println!("Index: {}, hash: {:016x}", separator.index, separator.hash);
  }

每个模块都通过示例进行文档说明,您可以在 examples/ 文件夹中找到。

要运行它们,请使用以下命令:

cargo run --example separator --release

注意:有些示例正在寻找名为 myLargeFile.bin 的文件,我没有将其上传到Github。请使用您自己的文件进行测试。

crate中包含的内容

从低级到高级

  • 一个 RollingHash64 特征,用于具有64位哈希值的滚动哈希。

  • Rabin64,具有64位哈希值的Rabin指纹滚动哈希的实现。

  • Separator,一个描述数据流中分隔符位置的struct。

  • SeparatorIter,一个适配器,它接受一个 Iterator<Item=u8> 作为输入,并枚举所有找到的分隔符。

  • Chunk,一个描述数据流中数据片段(索引和大小)的struct。

  • ChunkIter,一个适配器,它接受一个 Iterator<Item=Separator> 作为输入,并枚举块。

实现细节

  • 该库不会切割任何文件,它只提供如何操作的信息。

  • 您可以根据需要更改 Rabin64 使用的默认窗口大小以及 SeparatorIter 选择分隔符的方式。

  • 该crate的设计可能会在未来某个时候发生变化。我正在等待Rust的一些功能成熟,特别是 impl Trait 功能。

性能

调试构建和发布构建在性能方面存在巨大差异。记住,当您测试库时,请使用 cargo run --release

我可能在某个时候尝试提高库的性能,但现在它对于大多数用途来说已经足够好了。

许可协议

用❤️编码,遵循MIT许可协议,具体请参阅MIT许可证文件

无运行时依赖