4 个版本
0.0.4 | 2024年6月21日 |
---|---|
0.0.3 | 2022年4月29日 |
0.0.2 | 2022年2月4日 |
0.0.1 | 2021年10月29日 |
#598 在 网络编程
每月51次下载
43KB
853 行
Binsync
Binsync 是一个用于在两个位置之间同步大型二进制数据的库。它利用内容定义的分块将文件拆分成块,并只传输两个位置之间的差异。该库使用静态清单格式作为源,这意味着您可以在预先生成清单和块后,将它们提供给大量的目的地。
构建和测试
$ cargo build
$ cargo test --test integration_test
入门
该库有三个主要组件:清单、块提供者和同步器。
清单
清单描述了给定源目录中的文件和块。它包含所有文件的列表以及每个文件中块出现的顺序。这是为了提前生成,可以使用相同的清单为大量的目的地提供服务。一旦为给定的文件夹生成了清单,就可以将其序列化为任何数量的格式,只要您的目的地(远程或本地)理解如何解析清单以用于同步。
块提供者
块提供者从同步器获取块内容。这是一个可以实施以满足您需求的特质。提供了一些实现
CachingChunkProvider
对于在同一台机器上进行的本地同步是最佳的。它尝试尽快读取并缓存块,以最大限度地提高内存和磁盘 I/O 使用。RemoteChunkProvider
当源和目的地在不同的机器上时很有用。它的工作方式与缓存提供者类似,但会从远程基本 URL 获取块。
您的应用程序可能有不同的需求,例如从 S3 获取数据、进行认证请求、从多个来源获取数据等。
同步器
同步器接受一个清单和块提供者,并运行同步逻辑以将目标目的地转换为与源完全相同的二进制副本。它重用目的地文件夹中已存在的块以减少需要通过网络传输的数据量。
示例
use binsync::{Manifest, CachingChunkProvider, Syncer};
let manifest = Manifest::from_path("foo/source");
let basic_provider = CachingChunkProvider::new("foo/source");
let mut syncer = Syncer::new("foo/destination", basic_provider, manifest);
syncer.sync().unwrap();
集成测试是了解事物工作原理的绝佳方式。它们会生成一个包含输入/输出文件夹的测试文件夹并在两者之间进行同步。在 tests/common.rs
中,您可以注释掉 Drop
逻辑以防止测试在运行后清理文件夹。
贡献
欢迎提交拉取请求和问题。目前响应时间是尽力而为。
对于对 crate 本身进行工作,有一个简单的 cargo make 任务来格式化、构建和测试所有功能
$ cargo make development
依赖
~6–20MB
~273K SLoC