【发布时间】:2018-02-11 21:11:12
【问题描述】:
我有两台 PostgreSQL 服务器,一台集中式,一台外围。这个想法是让外围服务器从运行在同一台机器上的各种进程中积累数据。定期(可能每小时或大约每小时),数据从外围服务器传送到集中式服务器。在确认服务器成功后,外围服务器将擦除其内容以使其实现尽可能轻量级。
虽然最初这是一个相当直接的场景,其中有许多现有的解决方案,但我确信,有几个因素限制了我的选择:
外围服务器和集中式服务器之间的链接可能一次中断数天,在这种情况下,它只会保留所有数据,然后重试下一次计划的传输,数据量是原来的两倍。
没有记录重复至关重要,因此擦除的记录必须与传输的记录完全匹配。
-
很可能外围服务器在传输过程中积累了额外的数据,因此删除并重新创建表是不可行的,因为这会清除一些尚未传输的记录。
我从几个角度审视了这一点,我得出的结论是,我很可能在这里尝试重新发明轮子,因为有多种方法几乎可以满足我的需求。因此,我决定后退几步,看看针对这种情况会出现什么建议。那么我的问题是:
当链接不可靠时,推荐的传输方法是什么?
转账验证有哪些方法?
当外围数据库在传输过程中仍在累积数据时,如何确保擦除日期与传输数据完全匹配?
在 debian 上使用 postgresql 9.4.9。
一个想法的大致轮廓:
该表有一个
serial列,用于跟踪记录 ID。pg_dump将数据写入文件。文件名中使用了上述序列号,基本上是“这包含从X到Y的所有记录”dumpfile 通过 rsync 等方式复制到集中式服务器。
集中式服务器加载数据,并以某种方式将验证发送回包含串行的外围服务器。考虑重复几次以确保以后不会传输重复项。
外围服务器核对与已验证序列有关的所有数据。
有什么想法吗?
【问题讨论】:
标签: postgresql networking data-replicator