1 个不稳定版本
0.11.1 | 2023年12月18日 |
---|
#2361 在 数据结构
在 ax 中使用
240KB
5.5K SLoC
Banyan

Banyan 树是冠幅最宽的树。它们也会长出新根,经过一段时间后可能无法与原始根区分开来。这似乎很合适。
许可证
设计目标
- 宽叶子,尽可能包含更多数据,并且大小大致相同
- 低深度,宽分支
- 快速遍历、过滤和随机访问
便宜追加(可能,但需要与块存储更复杂的交互)- 无插入/拼接
- 具有删除的可能性
树结构
树的结构应该完全由内容决定,例如与具有历史记忆的平衡树不同。
应支持追加和批量追加。
节点结构
节点分为两部分。一个索引部分生活在父节点中,以快速访问,另一个值部分从父节点链接。
叶子构建器
叶子是最大的。构建器会增量编码和压缩数据。构建器的状态应该能够在任何时间被持久化。存储格式也应该是增量的(在末尾添加内容不需要在开头进行更改)
分支构建器
与叶子总是追加不同,分支大多数时候在最后一个索引处更新。分支存储为有效的 IPLD,因此可以通过 ipfs 进行遍历。非链接数据是 zstd 压缩的 cbor。
依赖关系
~38–55MB
~1M SLoC