当前场景:我们有数据库表来记录审计数据,并且大多数时候基于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
时,UI通常会超时。它需要更长的时间来进行任何导入/导出和每日备份以及许多其他。
解决方案我在想:我正在考虑将archive_audit_log
数据移动到S3
到多个文件,然后使用'Amazon Athena`服务进行查询以获得结果。
我想知道是否有人在烧手之前使用AWS Athena
这样的用例?此外,是否有任何limitation
或restriction
适用于查询数量与结果中的记录数量?感谢您阅读该问题,任何指针都将不胜感激。
这听起来像雅典娜的一个很好的用例。而不是将行移动到archive_audit_log
,将它们移动到S3上的CSV并使用Athena查询它们。根据您的应用程序使用的平台,您必须重写它以便能够针对Athena运行查询(SQL方言与MySQL略有不同,例如驱动程序将不同)。
Athena有一些限制,例如您可以运行多少个并发查询,但结果中的记录没有限制。如果达到并发查询的限制,您可以要求AWS支持人员增加限制,我相信您不会遇到限制问题。每个查询有一个30分钟运行时的硬限制,但这也不太可能。 40M行对雅典娜来说没什么。