数据模型

    ectd 使用多版本持久化键值存储来存储数据。当键值对的值被新的数据替代时,持久化键值存储保存先前版本的键值对。键值存储事实上是不可变的;它的操作不会就地更新结构,替代的是总是生成一个新的更新后的结构。在修改之后,key的所有先前版本还是可以访问和观察的。为了防止随着时间的过去为了维护老版本导致数据存储无限增长,存储应该压缩来脱离被替代的数据的最旧的版本。

    键空间维护多个版本。每个原子变化操作(类如,一个事务操作可能包含多个操作)在键空间上创建一个新的修订版本。先前版本持有的所有数据保持不变。key 的旧有版本还可以通过先前修订版本访问。同样的,修订版本也是被索引的;在修订版本上搜索(带观察者)是高效的。一旦存储被压缩来恢复空间,在压缩修订版本之前的修订版本被移除。

    物理视图

    etcd 以持久性 键值对的方式存储物理数据。存储的状态的每个修订版本仅仅包含和它的前一个修订版本的增量以求高效。单个修订版本可能对应到 tree 上的多个 key。

    etcd 也保持内存中的第二 btree 索引来加速 key 的范围查询。在 btree 索引中的 key 是存储暴露给用户的 key。值是到持久化 b+tree 修改的指针。压缩删除死指针。