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