我有一个 Postgres 数据库,其中有一个表格records
用于记录温湿度记录。
每天产生的数据很多,因为生产环境资源有限,我必须周期性将比较久的历史记录(比如 3 个月前)删除掉。
但是,这些删除的记录实际上是有意义的,只能在生产环境删除,在后台环境实际要保留。我想到两个方案来实现:
方案 A:
在后台环境对生产环境进行 logical replication ,但是指定订阅的动作是INSERT
和UPDATE
,这样即使每天将历史记录删除,也不会同步删除后台环境的记录,从而保持下来了。
但是这样有个问题,就是如果万一有一天需要重新同步(比如发生故障后主备切换,重新建立发布-订阅关系),那么这些历史数据就无法简单的保留了。
方案 B:
在后台环境对生产环境进行 logical replication ,对records
表格进行常规的所有操作同步。但是在后台环境的数据库中建立一个新的同结构备份表格,比如archive_records
。当从生产环境删除的时候,同时将记录移动到archive_records
表中。
这种方式有个不好的地方,就是跨库操作相对比较麻烦一点,需要用到 dblink 等操作。另外如果表格修改后,这一堆操作可能都得重新审计。
不知道各位大佬觉得哪个好,或者有没有更好的方案。
1
dotw2x 1 天前
要归档的数据应该不会再变更,真的有变更需求,那应该考虑加个变更版本号或时间戳字段,
方便识别提取真正需要归档的数据. 然后搞个 job 类的定时任务批量操作,数据库自带的 job 或者程序实现都行,时间丢到三更半夜执行. 先把目标数据转移到 archive 表,然后再从生产表删除,前端暴露一个单独查归档数据的入口, 足够满足大多数情况了,即使 Job 故障中断也不会产生什么重要影响. |