将存档 table 数据存储到 S3 并使用 AWS Athena 进行查询

Storing archive table data to S3 and query using AWS Athena

当前场景: 我们有数据库 table 来记录审计数据,查询在 table 上触发,大部分时间基于 object_id,很少在 created_date 范围内触发。 audit_log table 存储最后一个月的数据,一个月后数据移至 archive_audit_log table。这些 tables 位于 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;

table.

中大约有 1M+ 条记录

和相应的归档 table 具有完全相同的结构。

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;

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

我面临的问题: UI 通常在我们查询 archive_audit_log 时超时。 执行任何 import/export 和每日备份以及许多其他操作都需要更长的时间。

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

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

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

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