若集群中某些库表的数据几乎没有更新、插入和修改操作,且读取频率非常低,如果您有降本需求,可以使用PolarDB MySQL版提供的冷数据归档功能,将这部分数据转存至低成本的OSS上存储,以降低数据存储成本。本章节介绍了冷数据归档方法、技术原理等内容。
技术原理
归档为CSV或ORC格式的技术原理图如下:集群中的热数据存储在PolarStore中,各个PolarDB节点通过分布式文件系统(PolarFileSystem)访问PolarStore中的数据。为降低数据存储成本,达到冷热数据分离管理的目的,您可以将PolarStore中的冷数据转存至OSS:
对于普通表,您可以将冷数据归档为CSV或ORC格式并存储在OSS上,随后PolarDB节点可通过阿里云内网访问OSS上的数据。
对于分区表,您可以将冷数据归档为CSV或ORC格式并存储在OSS上,或在读写节点上创建DLM策略来自动归档冷数据。目前冷数据归档功能支持将分区表中的部分数据以OSS外表的形式归档至OSS,同时也支持将分区表中的部分分区直接转存至OSS。
归档后的数据格式会转变为CSV或ORC格式并分成多个文件存储在OSS上,PolarStore中的这部分数据会被自动删除,存储费用也会随着存储空间容量的降低而减少。
说明归档分区表中的冷数据功能目前处于灰度阶段,如需使用,请前往配额中心,根据配额ID
polardb_mysql_hybrid_partition
找到配额名称,在对应的操作列单击申请来开通该功能。冷数据归档完成后,OSS上的归档表只读,且查询性能较差。在没有索引且使用串行查询的情况下,查询性能约为InnoDB存储引擎的五分之一到十分之一。您需要提前测试数据归档后是否能满足您的查询性能要求。
当数据被归档为CSV或ORC格式作为冷数据存储后,不再支持事务。
冷数据归档完成后,进行备份操作时, 不会对OSS上已归档的冷数据进行备份,因此不支持通过备份进行库表恢复、备份恢复或按时间点还原操作。
归档为IBD格式的技术原理图如下:
与归档为CSV和ORC格式的文件不同。该方案是在InnoDB存储引擎下使用OSS,而不用修改表所在的引擎。仅通过归档语句手动将IBD格式文件的存储位置从PolarStore迁移至OSS。归档完成后,PolarStore中的这部分数据会被自动删除,存储费用会随存储空间容量的降低而减少。归档至OSS的IBD文件仍具有DML能力。且IBD格式的文件保留了原有的索引结构,因此归档后的IBD格式的文件仍具备原有索引能力。详情请参见归档为IBD格式。
说明归档为IBD格式目前处于灰度发布阶段。如需使用,请前往配额中心,根据配额ID
polardb_innodb_oss_enable
找到配额名称,在对应的操作列单击申请来开通该功能。
费用
冷数据存储按照OSS中冷数据存储的容量收取费用,具体收费为:
中国内地地域:0.00021元/GB/小时。
中国香港及海外地域:0.000294元/GB/小时。
您可以购买PolarDB存储包,来抵扣OSS中冷数据的存储容量,以减少存储冷数据的费用。关于PolarDB存储包的说明,请参见什么是存储包。
PolarDB存储包抵扣规则如下:
地域类型 | 抵扣因子 | 1 GB存储包的OSS存储空间抵扣量 |
中国内地 | 0.045 | 1/0.045=22.22 GB |
中国香港及海外 | 0.045 | 1/0.045=22.22 GB |
例如,您购买了一个容量为100 GB的PolarDB存储包,抵扣完存储空间使用量后还剩50 GB。您的集群的冷数据在中国内地地域使用了50 GB的OSS存储用量。此时,存储包将自动使用2.25 GB(50/22.22)的容量用于抵扣该部分的备份空间用量,最后该存储包还剩余47.75 GB容量。
若存储包中剩余容量不足以冷数据OSS存储用量,超出部分将正常按量付费。
版本要求
归档为CSV或ORC格式的集群的版本要求如下:
当产品系列为集群版时,版本需为如下版本之一:
PolarDB MySQL版8.0.1版本且修订版本为8.0.1.1.31及以上。
PolarDB MySQL版8.0.2版本且修订版本为8.0.2.2.9及以上。
当产品系列为多主集群(库表)时,版本需为PolarDB MySQL版8.0.1.0.13及以上。
归档为IBD格式的集群的版本要求如下:
PolarDB MySQL版的集群版需为8.0.1版本且修订版本为8.0.1.1.38或以上。
不同文件格式对比
归档冷数据时,您可以根据实际需要,选择合适的归档文件格式。
文件格式 | 归档速度 | 读取速度 | 是否是开源格式 | 占用的存储空间 | 归档后的数据修改方式 |
IBD | 较CSV格式快 说明 支持使用单线程和多线程并行归档两种方式。 | 快 说明 支持使用单线程和多线程两种方式读取数据。 | 否 | 与InnoDB引擎中的IBD文件占用的存储空间一致 | 归档后的表能正常执行DML操作。 |
CSV | 较ORC格式快 说明 只支持使用单线程方式归档数据。 | 行存节点上,较ORC格式文件快。 说明 支持使用单线程和多线程两种方式读取数据。 | 是 | 与没有索引的InnoDB引擎中的表占用的存储空间一致 | 需要将OSS数据导回至PolarStore,再进行修改。 |
ORC | 慢 说明 只支持使用单线程方式归档数据。 | 适合通过单独的列存节点进行AP查询。 说明 只支持使用单线程方式读取数据。 | 是 | 相同数据量的情况下,占用的存储空间为CSV格式文件占用的存储空间的45%。 |
使用说明
归档冷数据
您需要先登录PolarDB控制台并开启冷数据归档功能,然后连接数据库集群,再执行冷数据归档操作:
普通表:您可以手动将冷数据归档为CSV或ORC格式并存储在OSS上。
分区表:您可以手动将冷数据归档为CSV或ORC格式并存储在OSS上,或在读写节点上创建DLM策略来自动归档冷数据。
查询冷数据
对普通表和分区表执行冷数据归档操作后,您可以通过以下方法查询归档后的冷数据:
普通表:执行冷数据归档后,查询冷数据的方法和查询热数据的方法一致,不需要修改访问方式。
分区表:执行冷数据归档后,查询冷数据的操作方法请参见查询混合分区。
由于归档后的冷数据为单表多文件格式,在查看冷数据时,您可以采用并行查询进行查询优化,详情请参见基于OSS外表的单表多文件查询。
修改冷数据
修改CSV或ORC格式的冷数据。
如果您有低频修改归档到OSS上冷数据的需求,您可以通过
ALTER ENGINE
语法将OSS数据导回至PolarStore进行修改。数据导回至PolarStore后,会同步删除OSS上的冷数据。修改完数据之后,您可以再次将修改后的表归档为OSS表。详情请参见将OSS数据导回至PolarStore。修改IBD格式的冷数据。
与归档前的修改操作无差异,使用与冷数据归档前的SQL语句修改即可。
删除冷数据
首先,你需要使用
DROP TABLE
删除归档表,然后再通过CALL dbms_oss.delete_table_file('database_name', 'table_name');
来删除归档后的冷数据。
联系我们
若您对冷数据归档功能有任何问题,可通过钉钉搜索群号入群咨询。您可以直接@群内专家,并附上您要咨询的问题;同时群内也有PolarDB MySQL版 小助手24*7小时在线回答您的问题。
钉钉群号:24490017825