TokuDB · 引擎特性 · HybridDB for MySQL高压缩引擎TokuDB 揭秘

2022-03-24 00:00:00 索引 数据 事务 线程 压缩

原文出处:阿里云RDS-数据库内核组

HybridDB for MySQL(原名petadata)是面向在线事务(OLTP)和在线分析(OLAP)混合场景的关系型数据库。HybridDB采用一份数据存储来进行OLTP和OLAP处理,解决了以往需要把一份数据多次复制来分别进行业务交易和数据分析的问题,极大地降低了数据存储的成本,缩短了数据分析的延迟,使得实时分析决策称为可能。

HybridDB for MySQL兼容MySQL的语法及函数,并且增加了对Oracle常用分析函数的支持,完全兼容TPC-H和TPC-DS测试标准,从而降低了用户的开发、迁移和维护成本。

TokuDB是TokuTek公司(已被 Percona收购)研发的新引擎,支持事务/MVCC,有着出色的数据压缩功能,支持异步写入数据功能。

TokuDB索引结构采用fractal tree数据结构,是buffer tree的变种,写入性能优异,适合写多读少的场景。除此之外,TokuDB还支持在线加减字段,在线创建索引,锁表时间很短。

Percona Server和Mariadb支持TokuDB作为大数据场景下的引擎,目前官方MySQL还不支持TokuDB。ApsaraDB for MySQL从2015年4月开始支持TokuDB,在大数据或者高并发写入场景下推荐使用。

TokuDB优势

数据压缩

TokuDB显著的优势就是数据压缩,支持多种压缩算法,用户可按照实际的资源消耗修改压缩算法,生产环境下推荐使用zstd,实测的压缩比是4:1。

目前HybridDB for MySQL支持6中压缩算法:

  • lzma: 压缩比高,资源消耗高
  • zlib:Percona默认压缩算法,流行,压缩比和资源消耗适中
  • quicklz:速度快,压缩比低
  • snappy:google研发的,压缩比较低,速度快
  • zstd:压缩比接近zlib,速度快
  • uncompressed:不压缩,速度快

Percona建议6核以下场景使用默认压缩算法zlib,6核以上可以使用压缩率更高的压缩算法,大数据场景下推荐使用zstd压缩算法,压缩比高,压缩和解压速度快,也比较稳定。

用户可以在建表时使用ROW_FORMAT子句指定压缩算法,也可用使用ALTER TABLE修改压缩算法。ALTER TABLE执行后新数据使用新的压缩算法,老数据仍是老的压缩格式。

mysql> CREATE TABLE t_test (column_a INT NOT NULL PRIMARY KEY, column_b INT NOT NULL) ENGINE=TokuDB ROW_FORMAT=tokudb_zstd;

mysql> SHOW CREATE TABLE t_test\G
       Table: t_test
Create Table: CREATE TABLE `t_test` (
  `column_a` int(11) NOT NULL,
  `column_b` int(11) NOT NULL,
  PRIMARY KEY (`column_a`)
) ENGINE=TokuDB DEFAULT CHARSET=latin1 ROW_FORMAT=TOKUDB_ZSTD

mysql> ALTER TABLE t_test ROW_FORMAT=tokudb_snappy;

mysql> SHOW CREATE TABLE t_test\G
       Table: t_test
Create Table: CREATE TABLE `t_test` (
  `column_a` int(11) NOT NULL,
  `column_b` int(11) NOT NULL,
  PRIMARY KEY (`column_a`)
) ENGINE=TokuDB DEFAULT CHARSET=latin1 ROW_FORMAT=TOKUDB_SNAPPY

相关文章