有关SymmetricDS Embedded的一些问题

时间:2014-09-11 08:42:52

标签: java synchronization symmetricds

我需要在Java应用程序中实现数据库同步,我开始使用SymmetricDS,这是一个成熟的工具,允许同步不同的DBMS。

我使用SymmetricDS玩了一点但我无法满足我的需求,所以我对这个工具有一些疑问。

首先,我将公开应用程序的上下文: 我开发了一个用Java编写的桌面应用程序(JavaFX 2.0 + H2数据库+ Hibernate),我对Java很新,但我设法建立了一个MVC架构,最后完成了我的应用程序的独立版本。
现在,我必须在不同计算机上安装的多个应用程序实例之间进行同步。
我在外部服务器上运行了一个“主”MySQL数据库,它也将SymmetricDS作为“主”引擎运行。
应用程序使用H2 Database和ClientSymmetricEngine。
我需要在客户端之间同步所有数据。

我设法使用SymmetricDS建立一个或多或少的功能系统,但有一些关键点:

  • 有没有办法简单地实施“最后更新获胜”策略而不是默认使用的“最后同步获胜”?

  • 是否有更完整的文档或分步指南在现有应用程序中嵌入SymmetricDS?

  • 如何在不使用Spring Framework的情况下扩展对称拉取和推送作业(我需要在同步期间冻结应用程序)?

  • 如果我自己清除表格会发生什么:
    数据 DATA_EVENT OUTGOING_BATCH INCOMING_BATCH DATA_GAP NODE_HOST_STATS NODE_HOST_CHANNEL_STATS NODE_HOST_JOB_STATS 每次成功推/拉之后?即使没有同步更改,此表也会在几分钟后快速增长,这会使我的应用程序变慢。

阅读的Thx。
JBRTRND

1 个答案:

答案 0 :(得分:5)

  

有没有办法简单地实施“最后更新获胜”策略而不是默认使用的“最后同步获胜”?

是的,有:

  

NEWER_WINS:   表示当USE_TIMESTAMP或USE_VERSION检测到冲突时,源或目标将根据哪一方具有较新的时间戳或更高的版本号而获胜。 resolve_row_only列控制是否应忽略整个批处理,还是仅控制冲突中的行。

您必须使用USE_TIMESTAMP或USE_VERSION冲突检测,然后使用NEWER_WINS冲突解决策略。

  

是否有更完整的文档或分步指南在现有应用程序中嵌入SymmetricDS?

不,没有。您必须自己解决这个问题,甚至更好地使用独立服务器。不仅如此,您不必浪费时间将其集成到您的应用程序中,但未来的更新将是微不足道的。只需下载新版本并替换旧版本。

  

如何在不使用Spring Framework的情况下扩展对称拉伸和推送作业(我需要在同步期间冻结应用程序)?

SymmetricDS是使用Spring编写的,因此在没有大量重写的情况下使用其他内容进行扩展将非常困难。如果您使用独立服务器,那么就不需要扩展它,避免使用Spring。

  

如果我自己清除表格会发生什么:每次成功推/拉后,DATA DATA_EVENT OUTGOING_BATCH INCOMING_BATCH DATA_GAP NODE_HOST_STATS NODE_HOST_CHANNEL_STATS NODE_HOST_JOB_STATS?即使没有同步更改,这个表也会在几分钟后快速增长,这会使我的应用程序变慢。

不要自行清除,只需缩短清除作业的时间并减少成功同步代码的生存期,如下所述:http://www.symmetricds.org/doc/3.6/user-guide/html-single/user-guide.html#purge-job