
OceanBase 源码解读(六):存储引擎详解
此 前 , 带 你 读 源 码 第五篇
《
戳 这 里 回 顾 : OceanBase 源 码 解 读 ( 五 ) : 租 户 的 一 生 》 为 大 家 介 绍 了 社 区 版 中 创
建 、 删 除 租 户 、 资 源 隔 离 的 相 关 代 码 , 本 文 将 为 大 家 详 细 讲 解 OceanBase 存储 引 擎 。
本 文 将 回 答 关 于 OceanBase 数 据 库 的 相 关 提 问 :
OceanBase 是 否 依 赖 其 他 开 源 KV 数 据 库 ( 例 如 : LevelDB、 RocksDB) ?
OceanBase 底 层 引 擎 是 什 么 ? 是 KV 吗 ?
OceanBase 内 存 结 构 是 B+Tree 还 是 LSMTree ?
OceanBase 如 何 实 现 高 性 能 服 务 ?
背景
目 前 业 界 数 据 库 存 储 引 擎 主 要 分 为 两 种 :
update-in-place : 原 地更 新 , 较 常 见 于 传 统 关 系 型数 据 库 ( MySQL、 Oracle )采 用 的 B+Tree 结 构 。 优 点 :
更 新 记 录 时 对 原 有 记 录 进 行 覆 盖 写 。 有 较 好 的 数 据 局 部 性 , 对 扫 描 比 较 友 好 。 缺 点 : 是 引 入 大 量 的 随 机 写 , 同
时 还 有一 定 的 并 发 问 题 ; 并 且 与 业务 流 量 叠 加 , 对 业 务 流 量 有 一 定 的 影 响 ;
log-structure storage:日 志 更 新 ,例 如 LevelDB、RocksDB、HBase、BigTable 等 采 用的 LSMTree 结 构 。
优 点 : 日 志 更 新 无 锁 , 不 会 引 入 并 发 问 题 , 能 够 保 证 高 效 写 入 , 并 且 没 有 空 间 碎 片 。 缺 点 : 是 读 路 径 变 长 , 例
如 LSMTree 结 构 在 扫 描 时 需 要 读 取 memtable 、 L0 层 及 其 余 层 的 数 据 , 并 进 行 归 并 , 需 要 通 过 异 步
compaction 进 行 GC 以 及 均衡 各 个 层 级 的 数 据 来 避 免 过 多 的 读 放 大 。
为 追 求 极 致 的 数 据 库 性 能 , scan 操 作 需 要 良 好 的 空 间 局 部 性 , get/put 操 作 需 要 高 效 的 索 引 来 定 位 ,
version/gc/compaction 会 提 升 读 操 作 的 性 能 但 可 能 影 响 整 体 性 能 , 目 前 的 存 储 引 擎 都 存 在 着 一 定 的 局 限 性 。
为 此 OceanBase 选 择 完 全 自 主 实 现 存 储 引 擎 , 没 有 借 助 于 任 何 其 他 已 有 的 开 源 方 案 。
从 架 构 上 看 , OceanBase 的 存 储 引 擎 可 分 为 两 层 :
①底 层 的 分 布 式 引 擎 实 现 了 线 性 扩 展 、Paxos 复 制 、分 布 式 事 务 等 分 布 式 特 性 从 而 达 到 持 续 可 用 ;②上 层 的 单 机
引 擎 融 合 了 传 统 关 系 数 据 库 以 及 内 存 数 据 库 的 一 些 技 术 从 而 达 到 极 致 性 能 。
本 文 将 从 单 机 引 擎 和 分 布 式 架 构 视 角 分 别 介 绍 。
评论