Bε 树导论:把写入优化做进 B 树
来源:usenix.org — 2015-10-01
📋 概述
Usenix ;login: 2015 年 10 月号的经典综述,作者包括 Michael Bender、Martin Farach-Colton 等。Bε 树是 B 树的变体:每个内部节点留出一块写在磁盘上的缓冲区存消息,插入编码成 insert message、删除编码成 tombstone message,缓冲区满了就整批下推,从而不必为每个小写入满盘寻道;ε 在 0 到 1 之间决定节点空间如何分给枢轴(约 B 的 ε 次方)和缓冲(约 B 减去 B 的 ε 次方)。文中给出与 B 树、LSM 树的渐近 I/O 对比,并介绍 upsert:更新不必先读旧值,把回调与增量塞进消息即可。TokuDB 与 BetrFS 都是它的工业实现。
🔑 核心要点
- Tokutek 与 BetrFS 的实现中节点约 4MB、分支因子 4 到 16,因此每次 flush 至少 256KB。
- 性能规则:避免「先查询再更新」——查询速度与 B 树持平,插入却快好几个数量级,读改写会被查询那一半拖死。
- upsert 可表达计数自增、文件访问时间更新、账户余额扣减等只依赖键与旧值的异步修改。
- Bε 树最初由 Brodal 与 Fagerberg 提出,用来展示 B 树与 buffered repository tree 之间的渐近权衡曲线,实践价值在于取中间点。
💡 金句
Bε 树能同时支持高效的插入、点查询(即使存在 upsert)与范围查询。
👍 0
👎 0
← 返回 Lobsters 首页