3个版本 (破坏性更新)
0.3.0 | 2024年7月9日 |
---|---|
0.2.0 | 2023年11月25日 |
0.1.0 | 2023年3月1日 |
#512 在 数据结构
每月414次下载
在 5 crates 中使用
27KB
463 行
yrs-kvstore
yrs-kvstore是一个通用库,允许快速实现针对任何类型的持久化键值存储(例如LMDB或RocksDB)的Yrs特定文档操作。为了实现这一点,持久事务单元应通过[KVStore]特质的实现定义一系列基本操作。一旦完成,就可以实现[DocOps]。后者提供了一系列有用的操作,如文档元数据管理选项、文档和更新合并等。只要结构体正确实现了[KVStore],这些操作将自动实现。
lib.rs
:
yrs-kvstore是一个通用库,允许快速实现针对任何类型的持久化键值存储(例如LMDB或RocksDB)的Yrs特定文档操作。
为此,持久事务单元应通过[KVStore]特质的实现定义一系列基本操作。一旦完成,就可以实现[DocOps]。后者提供了一系列有用的操作,如文档元数据管理选项、文档和更新合并等。只要结构体正确实现了[KVStore],这些操作将自动实现。
内部表示
yrs-kvstore围绕几个关键空间操作。通过[DocOps]插入的所有键都以[V1]常量前缀。随后,键空间进一步划分为
- [KEYSPACE_OID],用于对象ID(OID)索引映射。每当插入新文档时,都会为其生成新的OID编号。虽然文档名称可以是任何类型的字符串,但OID保证具有固定大小。内部所有文档内容都通过其OID标识符引用。
- [KEYSPACE_DOC] 用于存储 文档状态,其 状态向量,相应的 更新序列 和 元数据。文档状态和状态向量可能不代表关于文档的完整系统知识,因为它们不反映文档更新中的信息。可以将更新单独存储,以避免每次更新都要进行大文档二进制读取/解析/合并/存储周期。在更新到来时插入更新,并偶尔调用 DocOps::flush_doc 或 DocOps::flush_doc_with 将其合并到文档状态本身是一个好主意。
正在使用的字节键的变体和模式可以总结如下
00{doc_name:N}0 - OID key pattern
01{oid:4}0 - document key pattern
01{oid:4}1 - state vector key pattern
01{oid:4}2{seqNr:4}0 - document update key pattern
01{oid:4}3{name:M}0 - document meta key pattern
依赖关系
~2.3–3.5MB
~72K SLoC