49个版本 (12个破坏性)
0.13.0 | 2022年10月7日 |
---|---|
0.12.0 | 2022年3月9日 |
0.11.5 | 2022年3月6日 |
0.9.0 | 2021年12月24日 |
0.1.6 | 2020年12月28日 |
#688 in 数据库接口
每月127次下载
用于 11 个Crate(7直接)
125KB
3K SLoC
IPFS sqlite块存储
基于sqlite的内容寻址数据(如IPLD)的块存储。
有关更多详细信息,请参阅模块级文档。
lib.rs
:
IPFS sqlite块存储
为ipfs的Rust实现提供的块存储。
概念
别名
别名是根的一个命名引用。当根被别名化时,dag指向的根的任何叶子都不会被gc收集。然而,别名化的根并不意味着dag必须是完整的。
临时别名
临时别名是一个无名的别名,仅用于在构建大型树时保护块免受gc的影响。虽然别名将单个名称映射到单个根,但在dag完成之前,临时别名可以分配给任意数量的块。
临时别名将在句柄超出作用域后立即删除。
垃圾回收(GC)
GC是指移除未引用块的进程。它仅在配置的大小目标被超过时运行。 大小目标 包含存储的总大小和块数。
GC将逐步运行,删除块,直到不再超过大小目标。可以自定义未引用块将被删除的顺序。
缓存
对于未固定块,可以使用CacheTracker来自定义哪些块的值最高。默认情况下,什么都不做,没有性能开销。
最复杂的实现策略是使用SqliteCacheTracker在单独的数据库中跟踪访问时间,这会有轻微的性能开销。
通过使用AsyncCacheTracker包装器在不同的线程上执行数据库写入,可以减轻在每次块读取时写入访问跟踪数据库的性能开销。
使用方法
阻塞
对于阻塞使用,请使用BlockStore。这是最底层的接口。
与go-ipfs固定概念的主要区别
- 固定/别名根不需要dag完整
- 与未命名和非引用计数固定相比,使用别名/命名固定
- 临时固定作为一种机制,在树构建过程中保持块免受gc的影响
依赖关系
~32MB
~517K SLoC