4

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

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

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

我设法使用 SymmetricDS 建立了一个或多或少的功能系统,但有一些症结:

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

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

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

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

谢谢阅读。
JBRTRND

4

1 回答 1

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-单/user-guide.html#purge-job

于 2014-09-11T11:55:11.543 回答