mysql - 将存档表数据存储到 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
在烧我的手之前是否有人正在使用这种用例?此外,是否有任何limitation
或restriction
应用于查询数量与结果中的记录数量?感谢您阅读问题,任何指针将不胜感激。
解决方案
这听起来像是 Athena 的一个很好的用例。不要将行移动到archive_audit_log
,而是将它们移动到 S3 上的 CSV 并使用 Athena 来查询它们。根据您的应用程序使用的平台,您必须重写它才能对 Athena 运行查询(例如,SQL 方言与 MySQL 略有不同,驱动程序也会有所不同)。
Athena 有限制,例如您可以运行多少并发查询,但对结果中的记录没有限制。如果您达到并发查询的限制,您可以要求 AWS 支持提高您的限制,我相当有信心您不会对限制有任何问题。每个查询有 30 分钟运行时间的硬性限制,但这也不太可能达到。40M 行对 Athena 来说不算什么。
推荐阅读
- dax - Dax,使用 CrossJoin 和过滤器创建表
- sql - 用于字符串的 SQL pyodbc
- node.js - 图像不能是数组或对象 - sequelize、postgres、nodejs、multer
- javascript - 具有基本 JavaScript 语法的间谍功能
- wordpress - 使用 P5.JS 和 WordPress 的响应式画布大小
- sql - Oracle表中缺少右括号错误
- python-3.x - Python - 临时更改默认编码?
- java - 我想在 java 中的 JTable 中显示我的 excel 表
- php - 仅在 WooCommerce 管理订单列表自定义列中显示特定订单状态的数据
- python - 如何将 df 列的 .describe() 输出写入新的 df?