开发者社区 问答 正文

压缩数据


阿里云数据库 MySQL 5.6 版支持通过 TokuDB 存储引擎压缩数据。经过大量测试表明,数据表从 InnoDB 存储引擎转到 TokuDB 存储引擎后,数据量可以减少 80% 到 90%,即 2T 的数据量能压缩到 400G 甚至更低。除了数据压缩外,TokuDB 存储引擎还支持事务和在线 DDL 操作,可以很好兼容运行于 MyISAM 或 InnoDB 存储引擎上的应用。

TokuDB 限制说明

  • TokuDB 存储引擎无法支持外键 Foreign Key。
  • TokuDB 存储引擎不适用于频繁大量读取的场景。


操作步骤


  1. 检查 MySQL 版本,命令如下。
    [backcolor=transparent]说明: 当前只有云数据库 MySQL 5.6 版支持 TokuDB 存储引擎,如果版本是 MySQL 5.1 或者 MySQL 5.5,需要先升级到 MySQL 5.6。[backcolor=transparent]SELECT version[backcolor=transparent]();

设置 [backcolor=transparent]loose_tokudb_buffer_pool_ratio 的比例,即 tokudb 占用 tokudb 和 innodb 共用缓存的比例。
  1. [backcolor=transparent]select[backcolor=transparent] sum[backcolor=transparent]([backcolor=transparent]data_length[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]into[backcolor=transparent] [backcolor=transparent]@all_size[backcolor=transparent] [backcolor=transparent]from[backcolor=transparent] information_schema[backcolor=transparent].[backcolor=transparent]tables [backcolor=transparent]where[backcolor=transparent] engine[backcolor=transparent]=[backcolor=transparent]'innodb'[backcolor=transparent];
  2. [backcolor=transparent]select[backcolor=transparent] sum[backcolor=transparent]([backcolor=transparent]data_length[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]into[backcolor=transparent] [backcolor=transparent]@change_size[backcolor=transparent] [backcolor=transparent]from[backcolor=transparent] information_schema[backcolor=transparent].[backcolor=transparent]tables [backcolor=transparent]where[backcolor=transparent] engine[backcolor=transparent]=[backcolor=transparent]'innodb'[backcolor=transparent] [backcolor=transparent]and[backcolor=transparent] concat[backcolor=transparent]([backcolor=transparent]table_schema[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]'.'[backcolor=transparent],[backcolor=transparent] table_name[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]in[backcolor=transparent] [backcolor=transparent]([backcolor=transparent]'XX.XXXX'[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]'XX.XXXX'[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]'XX.XXXX'[backcolor=transparent]);[backcolor=transparent]    
  3. [backcolor=transparent]select[backcolor=transparent] round[backcolor=transparent]([backcolor=transparent]@change_size[backcolor=transparent]/[backcolor=transparent]@all_size[backcolor=transparent]*[backcolor=transparent]100[backcolor=transparent]);

其中,[backcolor=transparent]XX.XXXX 为需要转化成 TokuDB 存储引擎的数据库和表名。
重启实例。
操作步骤请参见 重启实例
修改存储引擎。
  1. [backcolor=transparent]ALTER TABLE XX[backcolor=transparent].[backcolor=transparent]XXXX ENGINE[backcolor=transparent]=[backcolor=transparent]TokuDB

其中,[backcolor=transparent]XX.XXXX 为需要转化成 TokuDB 存储引擎的数据库和表名。
您也可以登录 DMS 修改数据表存储引擎,具体操作请参见 DMS 产品文档

展开
收起
云栖大讲堂 2017-10-18 14:06:15 1582 分享 版权
阿里云 AI 助理回答

阿里云数据库MySQL 5.6版本确实支持TokuDB存储引擎,该引擎以高效的数据压缩和对事务的支持而著称,非常适合需要大量数据存储且对空间敏感的场景。您提到的压缩率高达80%到90%,这对于减少存储成本和提高I/O效率非常有帮助。不过,使用TokuDB时需注意它不支持外键约束以及在频繁大量读取的场景下可能不是最佳选择。

根据您的描述,要将InnoDB表转换为TokuDB,可以遵循以下步骤:

  1. 检查MySQL版本

    • 使用命令 SELECT version(); 确认当前数据库版本是否为MySQL 5.6。如果不是,需要先升级至5.6版本。
  2. 配置TokuDB缓存比例

    • 调整loose_tokudb_buffer_pool_ratio参数来设定TokuDB在共享缓存中所占的比例,这有助于优化性能。
  3. 评估数据量与规划

    • 使用提供的SQL语句计算当前InnoDB表的数据量,以及计划转换到TokuDB的表所占的数据比例,以便合理分配资源。
  4. 重启实例

    • 根据阿里云文档指导重启MySQL实例,为更改存储引擎做准备。
  5. 修改存储引擎

    • 通过执行ALTER TABLE XX.XXXX ENGINE=TokuDB;命令来转换单个表的存储引擎。
    • 或者,您可以登录阿里云数据管理服务DMS,在其界面中直接修改表的存储引擎,具体操作请参考DMS的产品文档。

请注意,进行此类操作前,强烈建议备份数据库,以防转换过程中发生任何意外情况导致数据丢失。此外,由于TokuDB的特性和限制,务必评估应用是否适合使用TokuDB,特别是在依赖外键或有特殊读取模式的应用中。如果在操作过程中遇到问题,可以查阅阿里云官方文档或联系阿里云技术支持获取帮助。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答