3个版本 (破坏性更新)
0.3.0 | 2020年8月17日 |
---|---|
0.2.0 | 2017年5月18日 |
0.1.1 | 2016年2月25日 |
#624 在 算法
每月162次下载
99KB
2K SLoC
hash-roll
提供了一种通用的API,用于抽象化内容定义分块的各种实现。同时提供了多种内容定义分块算法的实现。
Rust中可用的分块选项比较
指标
- DER:重复消除比率
CDC参考文献
lib.rs
:
hash-roll提供各种内容定义分块算法
内容定义分块(CDC)算法是检查输入字节流(通常表示为切片,如 [u8]
)并在此输入流中提供拆分或分块位置的算法。
CDC算法通常试图优化以下方面
- 处理速度(即:每秒字节数)
- 即使在插入/删除字节的情况下,拆分位置也具有稳定性
- 合理的块长度分布
API概念
由于可能以不同的方式使用CDC,以及不同的CDC算法特性,hash-roll提供了几种使用它们的方法。
配置算法实例是从给定算法所需的配置集合中创建的。例如,这可能意味着配置窗口大小或如何决定拆分的位置。这些不包含任何可变数据,换句话说:它们不跟踪提供给它们的数据。配置算法实例提供一次性API,以及获取其他类型API的方法,如增量样式API。
CDC算法和窗口缓冲区
不同的CDC算法对处理数据的方式有不同的限制。值得注意的是,一些算法需要大量先前处理过的数据来处理额外的数据。这种“大量先前处理过的数据”通常被称为“窗口”。也就是说,请注意,一些使用窗口概念的CDC算法不需要先前访问的数据。
对于窗口缓冲算法,某些类型的API实现会带来额外的开销。文档将注明这些情况并提出替代方案。
通常,增量式CDC接口在窗口缓冲算法中会较慢。使用显式分配接口(会输出Vec<u8>
或Vec<Vec<u8>>
)的性能不会比增量式API差,但可能更方便。使用一次性API将提供最佳性能,因为它不需要任何缓冲(可以直接使用输入数据)。
驱动API选择的用例
-
累积向量,输出向量
- 增量式:是
- 输入:
Vec<u8>
- 内部状态:
Vec<Vec<u8>>
- 输出:
Vec<Vec<u8>>
-
通过流式数据传输
- 增量式:是
- 输入:
&[u8]
-
mmap(或读取整个)文件,输出
- 增量式:否
- 输入:
&[u8]
- 输出:
&[u8]