【发布时间】:2021-07-01 13:21:22
【问题描述】:
我设计了一个用于日志目的的表。这是表结构,我将使用 MySQL(InnoDB 引擎),它将托管在 AWS RDS 中。
| id (primary_key auto_increment) | entity_id (foreign key) | previous_value | current_value | calculation_done_with_this_row (boolean) | created_time |
这个表也将用于一些关键的业务计算,一旦计算完成某一天,日志表的数据就不再需要了。所以到目前为止,我计划对此类行完成计算后,立即删除日志表中的数据。
但我担心的是,如果出现问题,我需要查看历史数据,那我该怎么办?当我删除记录时,在这种情况下我没有任何支持吗?另一方面,如果我不从日志表中删除数据,它将充满不必要的数据,对业务计算没有贡献;从而降低计算查询的性能。
我的要求是保持日志表的大小,同时保留不必要的日志作为历史数据以备将来参考,如果需要也将历史数据导入回主数据库。
【问题讨论】:
-
可能性 1) 将行写入另一个表作为删除的一部分。 2)在删除之前备份表,给它一个反映数据日期的名称。如果您需要检查某些内容,请将其还原为另一个表名。
-
我会保留一个表,其中只包含计算所需的数据,计算后我会将它们移到日志表中,以供参考。你所说的这个日志表永远不会(或几乎永远不会)被使用,所以你不必为性能而烦恼(即使它在需要时可以完全运行)。
-
你检查partitioning了吗?这正是保持当前数据较小(使用分区修剪)并有效删除旧数据(删除分区)的概念。
-
@MarmiteBomber 我尝试进行分区。但是后来发现在InnoDB引擎中有外键限制的表中的分区还不支持。而我的日志表恰好有一个外键引用。
标签: mysql logging data-warehouse database-administration