数据库归档的实现方案调研(一)

公司最近说是数据库中数据量比较大,好多是15/16年的数据,基本不用,但是堆在数据库又严重影响性能,想找个方法解决掉它。所以,这个任务就这么放到了我的头上。

一、 目前问题

业务系统的业务表的数据量很大,严重影响性能,需要进行优化。

二、 问题解决方案

按照目前问题,对症下药,我们需要对数据进行归档。目前市面上有几个解决该问题的方案,可选用一种或多种进行优化

三、 方案一

3.1 TokuDB

RDS推出了数据压缩的支持,在TokuDB引擎的帮助下,RDS for MySQL能以低于五分之一的存储开销来支持用户大数据需求,进一步降低用户的数据存储成本。TokuDB是一个支持事务的MySQL引擎,拥有出色的数据压缩能力和极低的资源消耗。

3.2 为什么要压缩数据

当一个数据库的数据空间达到TB级别时运维难度是非常高的。尤其是数据迁移和备份操作,不仅耗时将会成倍增长,而且成功率会有很大下降。另外无论用户是自建数据库还是使用云服务,增长迅速的存储空间都会带来巨大的开支。

3.3 使用须知

  1. TokuDB可以大幅度降低存储使用量和IOPS开销
  2. TokuDB支持在线DDL,添加/删除列和索引不会引起阻塞
  3. TokuDB无法支持外键Foreign Key
  4. TokuDB不适用于大量读取的场景

3.4 操作步骤

首先说明版本要求:5.6及以上,5.6亲测可行

1、配置TokuDB引擎

select sum(data_length) into @all_size from information_schema.tables where engine='innodb'; 
select sum(data_length) into @change_size from information_schema.tables where engine='innodb' and concat(table_schema, '.', table_name) in ('dba1.tbl1', 'db2.tbl2', 'db3.tbl3'); 
select round(@change_size/@all_size*100);

参数配置:
登录RDS控制台,将loose_tokudb_buffer_pool_ratio设置为上步计算得到百分比。该参数需要重启数据库才能生效。

2、 开启压缩

RDS已推出数据不停机迁移服务

ALTER TABLE XXX ENGINE=TokuDB 

3.5 优势

1、高压缩比,默认使用zlib进行压缩,尤其是对字符串(varchar,text等)类型有非常高的压缩比,比较适合存储日志、原始数据等。官方宣称可以达到1:12。
2、在线添加索引,不影响读写操作
3、HCADER 特性,支持在线字段增加、删除、扩展、重命名操作,(瞬间或秒级完成)
4、支持完整的ACID特性和事务机制
5、非常快的写入性能, Fractal-tree在事务实现上有优势,无undo log,官方称至少比innodb高9倍。
6、支持show processlist 进度查看
7、数据量可以扩展到几个TB;
8、不会产生索引碎片;
9、支持hot column addition,hot indexing,mvcc

3.6 缺点

1、不支持外键(foreign key)功能,如果您的表有外键,切换到 TokuDB引擎后,此约束将被忽略。
2、TokuDB 不适大量读取的场景,因为压缩解压缩的原因。CPU占用会高2-3倍,但由于压缩后空间小,IO开销低,平均响应时间大概是2倍左右。
3、online ddl 对text,blob等类型的字段不适用
4、没有完善的热备工具,只能通过mysqldump进行逻辑备份

3.7 使用场景

1、访问频率不高的数据或历史数据归档
2、数据表非常大并且时不时还需要进行DDL操作

接下来还要继续调研一些新的适用方案,或许会有更优选择或者可以一起使用的方案,我会将我调研到的新技术继续更新的。

你可能感兴趣的:(数据库归档,第三方技术)