开发者推出ZAR归档格式:用Rust实现并行Zstandard压缩,支持版本化提交
来源标题:Zar-rs: A new fast, versioned, featureful archive format for Python developers
ZAR是一种全新的归档格式,用Rust实现并提供原生Python API,结合了并行Zstandard压缩与内容去重、版本化提交、历史恢复等特性。每次更新可新增提交并保留旧状态,因此无需为每个版本单独保存完整归档。同一Rust库还驱动命令行工具、桌面归档管理器及多语言绑定。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
你是否曾因压缩/解压工具速度太慢而感到无聊?因为速度很重要,我开发了一种全新的归档格式,并配有非常快速的工具。 ZAR 是一种新的归档格式,而不只是又一个对 ZIP 或 TAR 的 Python 封装。它的设计目标是把快速的并行 Zstandard 压缩与那些常见格式无法同时提供的特性结合起来:内容去重、带版本的提交、历史恢复以及恢复校验。 该格式用 Rust 实现,并提供原生 Python API。你可以快速创建归档、在同一归档中保留文件的早期版本,并在不解包全部内容的情况下恢复归档的某一部分。 而 Python 只是使用它的一种方式:同一个 Rust 库还为命令行工具、桌面归档管理器以及多种其他语言的绑定提供支持。 大多数归档格式擅长打包文件。ZAR 则还为管理这些文件随时间发生的变化而构建。每次更新都可以添加一个提交,同时保留之前的状态,因此你可以查看或恢复历史,而不必为每个版本单独保留一份完整归档。 这些并不只是宣传噱头:提交让你能够更新归档而不丢弃旧状态,去重在一次创建或添加操作中避免存储重复内容,而块帧结构让 ZAR 能够并行压缩并校验各个块。最终得到的是一种面向既想要快速归档操作、又想要有用历史记录的人的格式。 Python 包 pyzarlib 是 Rust 归档库的 PyO3 扩展。ZAR 将数据切分为块,并用 Zstandard 并行压缩。长时间运行的 Rust 操作会释放 Python 的 GIL,因此归档操作运行期间其他 Python 线程可以继续工作。 在一台 Linux Core i7-10700 上进行的一次未加密、热缓存基准测试中,ZAR 用 0.86 秒压缩了一个 525 MiB 的 Linux 源码树。在同一次运行中,ZIP 用了 11.01 秒,7z 用了 24.91 秒。ZAR 的归档大小为 115.5 MiB——比 ZIP 的 151.1 MiB 更小,但不如 7z 的 81.1 MiB 那么小。如果你需要小得多的归档,7z 可能更合适;如果你想要压缩时间与体积之间出色的平衡,ZAR 值得一试。 完整的基准测试报告包含解压时间、冷缓存运行结果以及测试环境详情。 你可以直接从 Python 创建、更新、检查、校验和解压归档。输入既接受 pathlib.Path,也接受字符串: from pathlib import Path import pyzarlib archive = Path("backup.zar") created = pyzarlib.create_archive( archive, [Path("src"), Path("README.md")], ) print(f"Created with {len(created['warnings'])} warning(s)")
Add a new commit. Earlier file versions remain in the archive history.
pyzarlib.add_archive(archive, [Path("README.md")])
Store and read custom archive-level metadata.
pyzarlib.update_custom_metadata( archive, set={"project": "example
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。