TokuDB简介

  |   0 评论   |   980 浏览

简介

TokuDB是MySQL的一个存储引擎。

与InnoDB相比,其压缩率是InnoDB的7倍,写入能力是InnoDB的一半,查询时间是InnoDB的两倍。[1]

特点

  • 开源
  • 性能与InnoDB相当
  • 数据压缩出色,支持zlib, quicklz, lzma压缩
  • 支持水平扩展
  • 支持ACID完整事务
  • 支持MVCC

非特点

  • 不支持外键(foreign key)

压缩

压缩算法 压缩效果 CPU消耗 使用建议 备注
lzma
zlib 中 (4:1) 6核以下默认使用
quicklz
snappy 较低
zstd 大数据场景使用
uncompressed

Fractal树

特点

  • 写入性能好,适合读多写少场景
  • 支持在线加减字段
  • 支持在线创建索引
  • 锁表时间短

与B树比较

结构 插入 KV查询 区间查询 备注
B树
Append 非常好
Fractal树

读写过程

见文档## TokuDB · 引擎特性 · HybridDB for MySQL高压缩引擎TokuDB 揭秘

  • 下看(promotion): 为了避免root成为热点,从root数据块开始至多往下看2层。
  • 对应msg buffer非空,则存储到当前的buffer上。
  • 对应msg buffer为空,则继续下看。

  • 先进行合并(merge, Msg apply),将中间数据块中的内容合并到叶数据块
  • 再从叶数据块上读取

优化

range查询

为了减少IO操作,每个最小单元(basement node)为64K,一次会读若干行到内存做缓存。

异步合并

cleaner线程是一个后台线程,会周期性的(每秒)执行,将msg buffer中的数据merge到下一层。

参考

评论

发表评论

validate