- 介绍
- 介绍 - 资料收集整理
- 安装 - Linux单机部署
- 官方文档(翻译)
- 官方文档(翻译) - 开发指南
- 开发指南 - 搭建本地集群
- 开发指南 - 和etcd交互
- 开发指南 - API 参考文档
- 开发指南 - API 并发参考文档
- 开发指南 - gRPC 网关
- 开发指南 - gRPC命名与发现
- 开发指南 - 试验性的API和特性
- 开发指南 - 系统限制
- 官方文档(翻译) - 操作etcd集群
- 操作etcd集群 - 搭建etcd集群
- 搭建etcd集群 - 运行时重配置
- 搭建etcd集群 - 运行时重配置的设计
- 操作etcd集群 - 搭建etcd网关
- 操作etcd集群 - 在容器内运行etcd集群
- 操作etcd集群 - 配置
- 操作etcd集群 - 加密(TODO)
- 操作etcd集群 - 维护
- 操作etcd集群 - 理解失败
- 操作etcd集群 - 灾难恢复
- 操作etcd集群 - 性能
- 操作etcd集群 - 版本
- 操作etcd集群 - 支持平台
- 官方文档(翻译) - 学习
- 学习 - 理解数据模型
- 学习 - 理解API
- 学习 - 术语
- 学习 - API保证
- API参考文档(翻译)
- API参考文档(翻译) - KV service
- KV service - Range方法
- KV service - Put方法
- KV service - DeleteRange方法
- KV service - Txn方法
- KV service - Compact方法
- API参考文档(翻译) - Watch service
- Watch service - Watch方法
- API参考文档(翻译) - Lease service
- Lease service - LeaseGrant方法
- Lease service - LeaseRevoke方法
- Lease service - LeaseKeepAlive方法
学习 - 理解数据模型
注: 内容翻译自 data model
etcd设计用于可靠存储不频繁更新的数据,并提供可靠的观察查询。etcd暴露键值对的先前版本来支持不昂贵的快速和观察历史事件(“time travel queries”)。对于这些使用场景,持久化,多版本,并发控制的数据模型是非常适合的。
ectd使用多版本持久化键值存储来存储数据。当键值对的值被新的数据替代时,持久化键值存储保存先前版本的键值对。键值存储事实上是不可变的;它的操作不会就地更新结构,替代的是总是生成一个新的更新后的结构。在修改之后,key的所有先前版本还是可以访问和观察的。为了防止随着时间的过去为了维护老版本导致数据存储无限增长,存储应该压缩来脱离被替代的数据的最旧的版本。
逻辑视图
存储的逻辑视图是一个扁平的二进制键空间。键空间有一个在byte string 键上的语义排序的索引,因此范围查询不是太昂贵。
键空间维护多个版本。每个原子变化操作(类如,一个事务操作可能包含多个操作)在键空间上创建一个新的修订版本。先前版本持有的所有数据保持不变。key的旧有版本还可以通过先前修订版本访问。同样的,修订版本也是被索引的;在修订版本上搜索(带观察者)是高效的。一旦存储被压缩来恢复空间,在压缩修订版本之前的修订版本被移除。
key的生命周期跨越一代(spans a generation)。每个key可以有一代或者多代。创建key增加了key的代,如果key从未存在则从1开始。删除一个key产生一个key的墓碑,结束key的当前时代。key的每次改动创建key的一个新的版本。一旦压缩发生,任何在给定修订版本之前结束的时代将被删除,而在压缩修订版本之前设置的值,除最后一个外,都将被移除。
物理视图
etcd以持久性 b+tree 键值对的方式存储物理数据。存储的状态的每个修订版本仅仅包含和它的前一个修订版本的增量以求高效。单个修订版本可能对应到tree上的多个key。
键值对的key是三元数组(major, sub, type)。Major是持有key的存储修订版本。Sub区分同一个修订版本的不同key。Type是用于特别值(例如,t
,如果值包含一个墓碑)的可选后缀。键值对的值包含对前一个修订版本的改动,例如对前一个修订版本的增量。b+tree以key的词典字节顺序排序。在修订版本增量上的延伸查找(Ranged lookups)很快。这样可以快速发送从一个特定修订版本到另一个的改变。压缩删除过期的键值对。
etcd也保持内存中的第二btree索引来加速key的范围查询。在btree索引中的key是存储暴露给用户的key。值是到持久化b+tree修改的指针。压缩删除死指针。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论