Rust 中的一些小型学习项目
Bitcask 是什么? Bitcask 是一种日志结构的键值存储模型(最初来自 Riak)。与在原地更新数据不同,每次写入 — — 无论是 set 还是 delete — — 都会被追加到日志文件的末尾。内存中的哈希索引(称为 "keydir")将每个键映射到其在日志中最新条目的偏移量/长度。键的旧版本在日志中只是成为死空间,直到合并(压缩)将仅对活动条目进行重写,生成一个新文件并回收磁盘空间。这种设计通过为非常快速的、大部分是顺序的写入和 O(1) 的读取牺牲了一些内存(每个键一个索引条目)。
这里的实现方式非常简单:
日志文件以 key_len(4B) | value_len_or_tombstone(4B) | key | value 的形式存储条目;负值表示是一个墓碑(删除)。
keydir: BTreeMap, (offset, length) 在启动时通过扫描日志一次在内存中重建。
MVCC 是什么? 多版本并发控制允许读者和写者同时工作,而不互相阻塞。 而不是覆盖一个值,每次写入都会创建一个带有单调递增版本号的 新版本。 事务在开始时获取一个版本号,并且只会看到在该时刻已经提交的版本(其"快照") - 从而实现可重复的读取,而不需要获取读锁。
暂无开放 Issues,或尚未同步最近议题。