OceanBase的MVCC和MySQL有什么区别?
2 个赞
MySQL (InnoDB):采用的是“原地更新 + 回滚日志”。
- 磁盘上通常只保留最新的数据。
- 旧版本被存放在
Undo Log里。如果你需要读旧版本,InnoDB 会根据回滚指针(DB_ROLL_PTR)去 Undo Log 里动态“拼凑”出历史快照。
OceanBase (LSM-Tree):采用的是多版本数据并行存储”。
- 数据更新不是原地覆盖,而是产生一条带版本号(时间戳)的新记录。
- 旧版本和新版本在合并(Merge)之前,共同存在于内存(MemTable)或磁盘(SSTable)中。读取时直接定位到对应版本,不需要像 MySQL 那样去回滚日志里找。
OceanBase 和 MySQL (InnoDB) 虽然都使用 MVCC (多版本并发控制) 来实现“读写不阻塞”的高并发能力,但在版本标识、存储架构、旧版本存储位置 以及实现细节 上存在显著差异。
简单来说,MySQL 的 MVCC 是基于“事务ID + Undo Log”实现的,而 OceanBase 的 MVCC 是基于“全局时间戳 (GTS) + LSM-Tree 增量存储”实现的。
1 个赞
学到了