3个版本 (破坏性更新)

0.3.0 2024年7月9日
0.2.0 2023年11月25日
0.1.0 2023年3月1日

#512数据结构

Download history 3/week @ 2024-04-20 18/week @ 2024-04-27 116/week @ 2024-05-04 3/week @ 2024-05-11 15/week @ 2024-05-18 45/week @ 2024-05-25 30/week @ 2024-06-01 50/week @ 2024-06-08 22/week @ 2024-06-15 85/week @ 2024-06-22 66/week @ 2024-06-29 231/week @ 2024-07-06 136/week @ 2024-07-13 109/week @ 2024-07-20 67/week @ 2024-07-27 79/week @ 2024-08-03

每月414次下载
5 crates 中使用

MIT 许可证

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_docDocOps::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