首页 > 解决方案 > 将存档表数据存储到 S3 并使用 AWS Athena 进行查询

问题描述

当前场景: 我们有数据库表来记录审计数据,查询在object_id大部分时间和很少created_date范围内被触发。audit_log表存储最近一个月的数据,一个月后数据被移动到archive_audit_log表中。这些表位于Amazon RDS.

CREATE TABLE IF NOT EXISTS audit_log (
id INT AUTO_INCREMENT,
object_id INT NOT NULL,
created_date DATE,
old_value TEXT,
new_value TEXT,
PRIMARY KEY (id)
)  ENGINE=INNODB;

表中大约有 1M+ 条记录。

以及相应的具有完全相同结构的归档表。

CREATE TABLE IF NOT EXISTS archive_audit_log (
id INT AUTO_INCREMENT,
object_id INT NOT NULL,
created_date DATE,
old_value TEXT,
new_value TEXT,
PRIMARY KEY (id)
)ENGINE=ARCHIVE;

表中大约有 40M+ 条记录,并且不断增长,其中一个数据库中的当前大小为(90 GB)。由于我们与客户的合同义务,此数据无法删除。

我面临的问题: 当我们在archive_audit_log. 执行任何导入/导出和每日备份以及许多其他操作都需要更长的时间。

我正在考虑的解决方案: 我正在考虑将archive_audit_log数据移动S3到多个文件中,然后使用“Amazon Athena”服务进行查询以获得结果。

我想知道AWS Athena在烧我的手之前是否有人正在使用这种用例?此外,是否有任何limitationrestriction应用于查询数量与结果中的记录数量?感谢您阅读问题,任何指针将不胜感激。

标签: mysqlamazon-s3amazon-rdsamazon-athena

解决方案


这听起来像是 Athena 的一个很好的用例。不要将行移动到archive_audit_log,而是将它们移动到 S3 上的 CSV 并使用 Athena 来查询它们。根据您的应用程序使用的平台,您必须重写它才能对 Athena 运行查询(例如,SQL 方言与 MySQL 略有不同,驱动程序也会有所不同)。

Athena 有限制,例如您可以运行多少并发查询,但对结果中的记录没有限制。如果您达到并发查询的限制,您可以要求 AWS 支持提高您的限制,我相当有信心您不会对限制有任何问题。每个查询有 30 分钟运行时间的硬性限制,但这也不太可能达到。40M 行对 Athena 来说不算什么。


推荐阅读