跳到主要内容

去重

启用 Xet 的仓库采用内容定义分块(CDC),在字节级(约 64KB 数据,也称“块”)实现去重。每个块通过滚动哈希进行标识,根据真实文件内容确定块边界,使其能够抵御文件任意位置的插入或删除。当 Xet 感知客户端向启用 Xet 的仓库上传文件时,会将文件拆分成这些大小不一的块。块化后,仅保留 Xet 存储中尚不存在的新块,其余全部丢弃。

为避免在块级别通信与管理带来的开销,新块会聚合成 64MB 的块文件后再上传。每个块文件都会存储在内容寻址存储(CAS)中,并使用其哈希作为键。

Hub 的当前建议是将单个文件限制在 20GB 以内。以 64KB 块大小计算,20GB 文件包含 312,500 个块,其中很多在不同版本间保持不变。Git LFS 只会识别“文件发生变化”,并存储整个修订版本。而 Xet 后端通过块级去重,只需存储文件中被修改的部分(可能仅几 KB 或 MB),还能在仓库之间安全地去重共享块。对于模型和数据集仓库中的大型二进制文件,这可显著缩短传输时间。

欲了解更多,请参阅 From Files to ChunksFrom Chunks to Blocks 两篇博客,或阅读 Low 等人在 Hugging Face 收购 XetHub 前发表的论文 Git is for Data