将存档表数据存储到S3并使用AWS Athena查询

时间:2019-04-15 12:01:06

标签: mysql amazon-s3 amazon-rds amazon-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;

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

我面临的问题: 当我们在archive_audit_log上查询时,UI通常会超时。 做任何导入/导出和每日备份以及许多其他操作都需要更长的时间。

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

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

1 个答案:

答案 0 :(得分:0)

这听起来像是雅典娜的好用例。不用将行移动到archive_audit_log,而是将它们移动到S3上的CSV并使用Athena进行查询。根据您的应用程序所使用的平台,您将必须对其进行重写,以便能够针对Athena运行查询(例如,SQL方言与MySQL稍有不同,并且驱动程序也将有所不同)。

Athena中有一些限制,例如可以运行多少个并发查询,但结果中的记录没有限制。如果您达到并发查询的限制,则可以要求AWS支持增加您的限制,而且我非常有信心您不会对此限制有任何疑问。每个查询都有30分钟的硬运行时间限制,但是您也不太可能遇到。雅典娜算不上四千万行。