作者:石雨轩,阿里云PolarDB-X开发工程师
冷热数据归档用于处理典型的冷热分离场景。很多业务场景下,随着时间的推移,数据热度会明显降低,被查询的概率也大幅下降。为了支持高速存取,数据库一般会使用固态硬盘,存储成本很高。
因此,对于被查询概率很低的数据,用户会定期进行归档。此前,我们通常使用delete语句删除已经过期的数据。但delete会造成锁表,也会产生大量Binlog,通常删除结束还需要进行optimized table来处理磁盘的空洞,过程危险而漫长,往往需要DBA在凌晨进行处理。
另外,通过delete语句将数据删除之后,冷数据库无法再被访问。但冷数据依然具有商业作用,分析处理冷数据可以帮助用户做出更好的决策。如果想继续访问,需要从存储冷数据的位置将数据导入数据库进行查询。
基于以上痛点问题,我们提供了冷数据表。冷数据表是与InnoDB表并列的一种存储引擎,可以支持多种数据源,比如在云上使用OSS,在云起实验室中使用CN的本地磁盘,也包括NFS和S3。因为是冷数据,因此不支持直接增删改,只能通过DDL进行数据的修改。
此外,冷数据表底层使用ORC文件,ORC无法完全兼容MySQL的类型系统。因此我们对ORC文件进行了魔改,使其能够完全兼容MySQL的类型系统,这也导致开源的ORC reader无法直接访问冷数据的ORC文件。冷数据表由CN直接进行读取解析,不会再经过DN以及InnoDB的表,因此性能有保证。
为了实现较强的TP能力,我们做了多层裁剪。因其基于ORC的列存结构,所以天然比InnoDB的行存有更强的AP能力。最后,冷数据表也支持任意时间点的恢复。
本次实验中会使用 loading 模式和 TTL 模式的归档表。上图第一条SQL表示将sysbench库的sbtest1表全量复制到当前库的sbtest1表。第二条SQL要求t_order必须是TTL的表,因为TTL有自动冷数据过期的能力,借助TTL模式的表,可以将过期数据自动归档到t_order_oss中,该表也称为归档表。归档表的性能可以用sbtest1进行验证。
TTL模式的表比loading模式的表增加了自动增量归档的能力。
归档表的TP能力可以实现较高的QPS。
上图为归档表AP查询的能力,在TPC-H 100G的测试场景下,性能优于同规格的InnoDB行存。
TTL的冷热分离能力能够自动将过期数据迁移到OSS中。
《PolarDB-X开源分布式数据库实战进阶》——PolarDB-X冷热数据归档(2):
https://developer.aliyun.com/article/1228564?groupCode=polardbforpg