数据库内核月报

数据库内核月报 - 2014 / 10

TokuDB · 引擎特性 · 压缩

Author:

TokuDB除了有着较好的写性能外,还有一个重要的特性:压缩,而且大部分情况下压缩效果很不错。

目前TokuDB有4种压缩算法:

tokudb_lzma:    压缩比高,CPU消耗也高
tokudb_zlib:    压缩比和CPU消耗持中(默认压缩算法)
tokudb_quicklz:    压缩比低,CPU消耗低
tokudb_uncompressed:无压缩

使用上也比较简单:

MariaDB:
CREATE TABLE `t_quicklz` (
`x` int(11) DEFAULT NULL,
`y` int(11) DEFAULT NULL
) ENGINE=TokuDB `compression`='tokudb_quicklz'
MySQL(Percona Server):
CREATE TABLE `t_quicklz` (
`x` int(11) DEFAULT NULL,
`y` int(11) DEFAULT NULL
) ENGINE=TokuDB DEFAULT CHARSET=latin1 ROW_FORMAT=TOKUDB_QUICKLZ

可能大家会有一个疑问:如果一个表创建的时候压缩算法是tokudb_quicklz,我可以通过ALERT TABLE改成其他算法吗?答案是:可以的!

TokuDB在底层实现上,用1byte来标记当前block的压缩算法,并持久化到磁盘,当压缩算法改变后,从磁盘读取数据然后解压缩的代码类似:

switch (block_buffer[0] & 0xF) {
case TOKU_NO_COMPRESSION:
...
break;

case TOKU_ZLIB_METHOD:
...
break;

case TOKU_QUICKLZ_METHOD:
...
break;
case TOKU_LZMA_METHOD:
...
break;
}

是不是很机智?

在使用TokuDB的过程中,一般不会改变压缩算法,除非默认的tokudb_zlib不给力,TokuDB是大block(4MB),压缩效果较好,enjoy~