【问题标题】:Storing archive table data to S3 and query using AWS Athena将存档表数据存储到 S3 并使用 AWS Athena 进行查询
【发布时间】:2019-04-15 12:01:06
【问题描述】:

当前情况: 我们有数据库表来记录审计数据,并且查询在大多数时间基于object_id 而很少在created_date 范围内被触发。 audit_log 表存储最后一个月的数据,一个月后数据移动到archive_audit_log 表。这些表位于AmazonRDS

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 时,UI 通常会超时。 执行任何导入/导出和每日备份以及许多其他操作都需要更长的时间。

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

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

【问题讨论】:

    标签: mysql amazon-s3 amazon-rds amazon-athena


    【解决方案1】:

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

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

    【讨论】:

    • 如果可能的话,我强烈建议将数据以 parquet 格式而不是 CSV 存储在 S3 中,这将为您在大型数据集上提供更好的性能。
    猜你喜欢
    • 1970-01-01
    • 2020-08-24
    • 2019-02-02
    • 2019-08-26
    • 1970-01-01
    • 2019-11-10
    • 2020-11-25
    • 2020-09-19
    • 1970-01-01
    相关资源
    最近更新 更多