V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhwguest
V2EX  ›  数据库

关于数据进行历史删除和备份方案选择

  •  
  •   zhwguest · 1 天前 · 457 次点击

    我有一个 Postgres 数据库,其中有一个表格records用于记录温湿度记录。

    每天产生的数据很多,因为生产环境资源有限,我必须周期性将比较久的历史记录(比如 3 个月前)删除掉。

    但是,这些删除的记录实际上是有意义的,只能在生产环境删除,在后台环境实际要保留。我想到两个方案来实现:

    方案 A:

    在后台环境对生产环境进行 logical replication ,但是指定订阅的动作是INSERTUPDATE,这样即使每天将历史记录删除,也不会同步删除后台环境的记录,从而保持下来了。

    但是这样有个问题,就是如果万一有一天需要重新同步(比如发生故障后主备切换,重新建立发布-订阅关系),那么这些历史数据就无法简单的保留了。

    方案 B:

    在后台环境对生产环境进行 logical replication ,对records表格进行常规的所有操作同步。但是在后台环境的数据库中建立一个新的同结构备份表格,比如archive_records。当从生产环境删除的时候,同时将记录移动到archive_records表中。

    这种方式有个不好的地方,就是跨库操作相对比较麻烦一点,需要用到 dblink 等操作。另外如果表格修改后,这一堆操作可能都得重新审计。

    不知道各位大佬觉得哪个好,或者有没有更好的方案。

    1 条回复    2025-01-06 13:19:59 +08:00
    dotw2x
        1
    dotw2x  
       23 小时 1 分钟前
    要归档的数据应该不会再变更,真的有变更需求,那应该考虑加个变更版本号或时间戳字段,
    方便识别提取真正需要归档的数据.
    然后搞个 job 类的定时任务批量操作,数据库自带的 job 或者程序实现都行,时间丢到三更半夜执行.
    先把目标数据转移到 archive 表,然后再从生产表删除,前端暴露一个单独查归档数据的入口,
    足够满足大多数情况了,即使 Job 故障中断也不会产生什么重要影响.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3754 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 18ms · UTC 04:21 · PVG 12:21 · LAX 20:21 · JFK 23:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.