我们有一个基于 Java 的系统,以 postgres 作为数据库。由于某些原因,我们希望及时(例如 1 小时)将某些更改传播到不同的位置。两种广泛的方法是
- 在发生这种情况时记录对文件的所有更改。然而,这种方法会将代码分散到各处。
- 以某种方式在某些日志文件中的两个时间戳之间找到 postgres 中的增量更改并将其发送。但是我不确定这种方法有多可行。
有人对此有任何想法/想法吗?
我们有一个基于 Java 的系统,以 postgres 作为数据库。由于某些原因,我们希望及时(例如 1 小时)将某些更改传播到不同的位置。两种广泛的方法是
有人对此有任何想法/想法吗?
如果数据库大小不是很大,您可以通过以下方式快速完成:
将整个 postgresql 转储到文本文件。
(如果转储文件未排序 *1)对文本文件进行排序。
使用以前的转储文件创建一个差异文件。
当然,我只建议在您的数据库将保持相对较小并且您将其用于几台服务器的情况下这样做。
*1:我不知道它是否以某种方式排序,请查看文档。
有许多预先打包的方法,因此您可能不需要开发自己的方法。许多选项在此 Wiki 页面上进行了总结和比较:
http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling
其中许多基于使用触发器来捕获数据,并基于更友好的用户界面自动生成触发器。
我建议不要编写自己的解决方案,而是利用其他人已经完成的工作。在你描述的情况下,我会选择 PgQ + Londiste(都是 Skytools 包的一部分),它易于设置和使用。如果您不想要流式复制,您仍然可以使用 PgQ / Londiste 轻松捕获 DML 并将它们写入您可以在需要时加载的文件。这将允许您在新需求出现时扩展您的设置/处理。