Cassandra Thrift Asked: 2023-03-02 12:51:14 +0800 CST2023-03-02 12:51:14 +0800 CST 2023-03-02 12:51:14 +0800 CST Mariadb 中的数据保留 772 我只想将 Mariadb 数据库中所有 15 个表的数据保留 90 天。当前数据库大小为 60 GB。有哪些可用于执行相同操作的选项。 mariadb 2 个回答 Voted Rick James 2023-03-02T13:26:25+08:002023-03-02T13:26:25+08:00 你可以PARTITION BY RANGE(TO_DAYS(...))每张桌子。然而,拥有不止一张大表并且需要定期清理,这有点奇怪。 我建议每周分区。更多细节: 分区 请注意,您应该在分区时重做许多索引。并且分区不太可能提供任何性能优势,除了周期性的DROP PARTITION和REORGANIZE PARTITION。 Best Answer danblack 2023-03-02T14:18:22+08:002023-03-02T14:18:22+08:00 从MariaDB-10.9.1开始,系统版本表可以自动创建分区并让它们过期。 因此,即使对于显式列中没有时间戳的表: alter table t1 WITH SYSTEM VERSIONING PARTITION BY SYSTEM_TIME INTERVAL 1 DAY AUTO PARTITIONS 90; 系统版本表是当前数据和历史数据的概念,因此历史数据的查询需要特殊处理,这并不是 Rick James 回答中传统分区的替代品。 根据您的应用程序,这可能有意义也可能没有意义。 查询历史数据如下: SELECT * FROM t FOR SYSTEM_TIME AS OF TIMESTAMP'2023-03-02 08:07:06'; 很明显,数据与当前系统时间相关联,删除的数据进入历史记录,并在其 90 天结束后被清除。
你可以
PARTITION BY RANGE(TO_DAYS(...))
每张桌子。然而,拥有不止一张大表并且需要定期清理,这有点奇怪。我建议每周分区。更多细节: 分区
请注意,您应该在分区时重做许多索引。并且分区不太可能提供任何性能优势,除了周期性的
DROP PARTITION
和REORGANIZE PARTITION
。从MariaDB-10.9.1开始,系统版本表可以自动创建分区并让它们过期。
因此,即使对于显式列中没有时间戳的表:
系统版本表是当前数据和历史数据的概念,因此历史数据的查询需要特殊处理,这并不是 Rick James 回答中传统分区的替代品。
根据您的应用程序,这可能有意义也可能没有意义。
查询历史数据如下:
很明显,数据与当前系统时间相关联,删除的数据进入历史记录,并在其 90 天结束后被清除。