多版本并发控制(MVCC)是现代数据库的核心机制,允许读写操作并发进行,避免了传统加锁的性能瓶颈。PostgreSQL 通过在堆表中存储版本链和快照隔离来管理事务可见性。虽然快照隔离能防止脏读和不可重复读,但存在 write skew 问题。为了解决这一问题,PostgreSQL 引入了可序列化快照隔离(SSI),增加了读写依赖追踪。MVCC 的代价包括版本膨胀和 VACUUM 开销,因此需要合理选择隔离级别以平衡性能与正确性。
PostgreSQL 迎来30周年,核心开发者Tom Lane回顾项目历程。他指出进程隔离模型带来代码简洁与崩溃恢复优势,但连接扩展需依赖连接池。MVCC和WAL设计成功,将维护工作推给后台。项目坚持可扩展性,但解析器仍难扩展。治理靠邮件共识,无正式路线图。AI生成报告增多,社区强调人类需对代码负责。
本文介绍etcd v3.5.33的MVCC数据模型,核心是Revision(main/sub)全序、keyIndex的generation生命周期,以及内存treeIndex与bbolt后端的职责分工。相比ZooKeeper的覆盖写和一次性Watch,etcd v3保留历史版本直到compaction,支持持久Watch和Txn compare可见性。文章还涉及与Watch、Txn、K8s resourceVersion的接口,以及历史保留与磁盘占用的权衡。
本文介绍etcd排障的五轴坐标系:Raft共识、WAL持久化、MVCC存储、Watch同步、Lease TTL。通过症状映射到对应轴,提供诊断工具和指标,如endpoint status字段解读。强调先定位问题轴再下钻组件,避免盲目defrag或restore。附K8s控制面对照表和证据包写法建议。
本文介绍 etcd 生产内核系列文章,涵盖 Raft、WAL、MVCC、Watch、Lease 五轴排障框架,共16篇。内容聚焦读写失败归因、线性一致读、Watch 追赶、Lease 切换及 K8s 耦合,并给出选型建议(何时用 etcd 或 TiKV/FDB)。版本锚定 v3.5.33,适合 SRE 和架构师深入掌握 etcd 运维与故障定位。
本文介绍etcd生产内核系列文章,聚焦Raft共识、WAL持久化、MVCC存储、Watch同步和Lease TTL五条排障坐标系。文章指出常见问题如proposal卡顿、follower读stale、Watch追赶OOM等,并规划16篇阅读路线,强调K8s apiserver与etcd的耦合关系,为运维排障提供系统化框架。
etcd v3.5.33将MVCC映射至bbolt,采用mmap预分配与批量提交(100ms或10000条)优化fsync。单写者约束使写路径串行,读路径并发。delete操作立即提交保证线性一致。bucket布局以revision为键,treeIndex管理逻辑映射。
本文介绍etcd v3.5.33中Raft提交条目如何通过apply管道转为MVCC revision并触发Watch。核心是区分committed index与applied index:commit仅表示日志复制完成,apply才更新MVCC状态。applyAll循环处理快照和条目,treeIndex内存索引过滤revision后批量读bbolt。Watch在事务End时同步通知。apply滞后会通过ErrTooManyRequests背压客户端,排障需区分Raft复制慢还是apply慢。
本文介绍etcd v3.5.33中Txn事务的实现机制,包括只读与写事务路径、compare操作(MOD/CREATE/VERSION等)、MVCC可见性及嵌套事务处理。同时分析Jepsen测试边界:KV多键事务在3.4.3中通过严格可串行化检验,但Lease锁因时钟分区问题不安全,需配合fencing机制使用。最后提供并发场景速查表,强调Txn用于条件更新和锁保护,避免无Lease永久key等误区。
PostgreSQL 的隔离级别从宽松到严格依次为读已提交、可重复读、可串行化,分别防止脏读、不可重复读、幻读和序列化异常。MVCC 通过快照实现隔离,快照记录事务状态而非 LSN。CDC 中,复制槽创建时导出快照,配合 WAL 流确保数据完整,需用可重复读只读事务导入快照。
PostgreSQL的MVCC设计虽受批评,但所有数据库的多版本并发控制都有代价,只是失败模式不同。PostgreSQL将旧版本存于表中,导致写放大、表膨胀和清理负担;Oracle和InnoDB用撤销日志,但回滚和读取旧数据成本高;其他系统如MongoDB、LSM和etcd也各有缺陷。核心是权衡,而非绝对优劣。
本文深入探讨了MySQL InnoDB的MVCC机制,分析了其对DML延迟、崩溃恢复和并发语义的影响,并强调理解源码结构的重要性。提供了源码路径、流程图和实验步骤,并与PostgreSQL进行了对比,讨论了MVCC与日志系统的耦合关系及本地验证实验的必要性。
本文介绍WiredTiger存储引擎的时间戳与快照机制。核心概念包括:应用时间戳由上层控制,执行时间是墙上时钟;active time window由oldest、stable、pinned界定可读与可丢弃历史;快照通过max/min/并发事务ID列表决定可见性;默认snapshot隔离,prepared事务有特殊边界。文章强调时间戳与快照共同支撑MongoDB的MVCC实现。
本文对比PostgreSQL、InnoDB、RocksDB和WiredTiger四种存储引擎,从缓存、脏页、WAL、MVCC落点、旧版本回收及故障形态等维度列出机制对照表,强调机制与代价而非性能排名。指出WiredTiger区分内存与磁盘页,HS存储旧版本,并提醒避免跨引擎类比运维参数,为选型提供参考。
本文介绍WiredTiger内核系列文章,涵盖MongoDB默认引擎的MVCC实现路径,包括Cache、Eviction、Reconciliation、History Store和Checkpoint等核心机制。系列共17篇,从Session/Cursor到选型对照,重点解析更新链、脏页驱逐、旧快照读取及崩溃恢复,并对比PG、InnoDB、RocksDB等引擎,为运维和架构师提供完整技术参考。
PostgreSQL通过MVCC实现多版本并发控制,每次更新会保留旧版本元组,导致表膨胀。事务使用XID和命令ID跟踪可见性,快照隔离决定数据可见性。VACUUM清理死元组,但受事务地平线限制,长事务会阻止清理。子事务和HOT链影响清理效率,需定期维护以避免性能下降。
WiredTiger通过History Store实现MVCC:用户表仅存最新已提交版本,旧版本存入独立的WiredTigerHS.wt文件。读路径按update chain→磁盘页→History Store顺序查找。相比Lookaside,Durable History提供跨eviction/checkpoint的可查询历史契约,由minSnapshotHistoryWindowInSeconds控制保留窗口。与PG堆版本、InnoDB undo相比,WT将当前与历史分离,利于用户页驱逐,但增加历史I/O与磁盘开销。
WiredTiger采用第三种MVCC方案:用户表B-Tree仅存最新已提交版本,旧版本存入全局History Store(WiredTigerHS.wt)。写路径通过reconciliation将旧版本写入HS,读路径按update chain→磁盘页→HS顺序查找。Durable History取代Lookaside,使历史可跨eviction/checkpoint持久查询,由minSnapshotHistoryWindowInSeconds控制保留窗口。与PostgreSQL堆版本、InnoDB undo相比,WT分离当前与历史,利于用户页驱逐,但增加历史I/O与磁盘开销。
TiKV 将 Percolator 的锁、数据和写入三列映射为 RocksDB 的 CF_LOCK、CF_DEFAULT 和 CF_WRITE。通过时间戳的位反转实现 Key 编码规则,确保查询时优先返回最新版本。TiKV 的 MVCC 时间戳由 PD 的 TSO 提供,确保跨 Region 的全局一致性,区别于 RocksDB 的单机快照机制。这三种 CF 共同维护同一逻辑数据,需联合管理。
Rama 0.3 发布,标志着从长期打磨阶段转向稳定发布,承诺每2-8周更新一次。Rama 已在多种真实业务中应用,展现出生产级扩张潜力。nexir-mvcc-core 专注于 MVCC 核心,提供可复用的事务组件,适合 KV 和分布式数据库。Rust OSDev 生态持续推进,多个项目如 Asterinas 和 Zinnia 取得进展,提升了嵌入式和内核级开发体验。
完成下面两步后,将自动完成登录并继续当前操作。