Xorb 形成和序列化格式
"Xorb"(Xet Orb,发音类似 "zorb")是一系列块以及一系列块的序列化格式。
收集块
使用分块算法,文件被映射到一系列块,一旦找到这些块,就需要将它们收集到 Xorbs 集合中。
将一系列块收集到 Xorbs 中是有利的,这样它们可以作为整个块范围被引用。
假设文件按顺序 ABCD 被分块为块 A、B、C、D。然后创建一个 Xorb X1,按此顺序包含块 A、B、C、D(从块索引 0 开始),假设此 Xorb 的哈希是 X1。然后 要重建文件,我们请求 Xorb X1 块范围 [0, 4)。
虽然 Xorb 中的块数量没有明确限制,但序列化的 Xorb 总大小限制为 64MiB。 由于某些块会被压缩,通常建议收集块直到它们的总未压缩长度接近 64 MiB,然后序列化结构。 也就是说,Xorbs 指向大约 64 MiB 的数据。 (回想一下,目标块大小是 64 KiB,因此预计每个 Xorb 大约有 ~1024 个块)。
CAS 服务器将拒绝超过 64 MiB 序列化大小限制的 Xorb 上传。
如果大小要求允许,建议将来自多个文件的块打包到一个 Xorb 中,例如文件 X 和 Y 各自产生 10 个新块,总共约 128000 字节,那么所有这些块都可以放入一个新的 Xorb。
Xorb 格式
Xorb 是一系列"块",按照特定格式序列化,该格式支持访问范围块并在块级别构建压缩。
┌─────────┬─────────────────────────────────┬─────────┬─────────────────────────────────┬─────────┬─────────────────────────────────┬──────────
│ Chunk │ │ Chunk │ │ Chunk │ │
│ Header │ Compressed Chunk Data │ Header │ Compressed Chunk Data │ Header │ Compressed Chunk Data │ ...
│ │ │ │ │ │ │
└─────────┴─────────────────────────────────┴─────────┴─────────────────────────────────┴─────────┴─────────────────────────────────┴───────────
│ Chunk 0 │ Chunk 1 │ Chunk 2 │ ...
块寻址
每个块在其所在的 Xorb 内都有一个索引,从 0 开始。
块可以通过其索引单独寻址,但通常按范围寻址或获取。
块范围始终指定为起始包含和结束独占,即 [start, end)。