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

    目前TokuDB有4种压缩算法:

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

    使用上也比较简单:

    1. MariaDB:
    2. CREATE TABLE `t_quicklz` (
    3. `x` int(11) DEFAULT NULL,
    4. `y` int(11) DEFAULT NULL
    5. ) ENGINE=TokuDB `compression`='tokudb_quicklz'
    6. MySQL(Percona Server):
    7. CREATE TABLE `t_quicklz` (
    8. `x` int(11) DEFAULT NULL,
    9. `y` int(11) DEFAULT NULL
    10. ) ENGINE=TokuDB DEFAULT CHARSET=latin1 ROW_FORMAT=TOKUDB_QUICKLZ

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

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

    1. switch (block_buffer[0] & 0xF) {
    2. case TOKU_NO_COMPRESSION:
    3. ...
    4. break;
    5. case TOKU_ZLIB_METHOD:
    6. ...
    7. break;
    8. case TOKU_QUICKLZ_METHOD:
    9. ...
    10. break;
    11. case TOKU_LZMA_METHOD:
    12. ...
    13. break;

    是不是很机智?

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