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~