关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。
想改进这个问题?将问题更新为 on-topic对于堆栈溢出。
6年前关闭。
Improve this question
我正在尝试优化信息系统的后端以实现高可用性,这涉及将时间关键的客户请求(前台)所需的部分与其余部分(后台)分开。
前台将拥有具有负载平衡功能的冗余应用程序服务器,以实现最佳性能,并将使用具有预先计算数据的数据库。后台会定期根据客户统计数据和一些外部数据为前台准备数据。
一部分数据模式将在后台和前台之间共享,但不是整个数据库,只是一些表的一部分。数据不需要一直对应,两个数据库之间会定期同步。连续同步也是可行的,但没有实时一致性要求,而且似乎批处理式同步在控制、调试和备份可能性方面会更好。我预计不需要解决冲突,因为数据大多只会在一侧增长和变化。
该解决方案应该允许定义相应的表和列,然后它将插入/更新新的/更改的行。理想情况下,解决方案应该使用 Groovy 类中定义的数据模型(可能通过注释?),因为这两个应用程序都在 Grails 上运行。同步可以使用现有的 Grails Web 应用程序或在外部运行,甚至可以单独在数据库服务器(Postgresql)上运行。
有用于复制整个镜像数据库的系统,但我找不到任何适合我需要的解决方案。您是否知道任何现有的框架可以帮助解决这个问题或让我自己的框架是唯一的可能性?
最佳答案
我最终使用了 SkyTools 的 Londiste。 pgFoundry 站点上的项目页面列出了相当旧的二进制文件(目前已关闭),因此您最好从 source 构建它.
它只是一个方向(主从),因此必须为双向同步设置两个同步实例。请注意,每个实例都包含两个 Londiste 二进制文件(主从工作人员)和一个推送更改的自动收报机守护程序。
为了减少同步流量,您可以在配置文件中延长轮询周期(默认为 1 秒),甚至可以通过停止 ticker 将其完全关闭,然后通过运行 SQL 函数 pgq.ticker
手动触发同步上主。
我通过编写一个简单的自定义处理程序(londiste.handler.TableHandler
子类)并在数据库中配置了列映射来解决部分列复制的问题。映射配置不是我最初计划的(还)模型驱动的,但我只需要复制公共(public)列,所以这个解决方案现在就足够了。
关于database - 部分双向数据库同步框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31970490/