13

我希望找出人们用来在数据库之间同步数据的工具。我正在寻找可以用作命令行工具的 JDBC 解决方案。

曾经有一个名为 Sync4J 的工具使用 SyncML 框架,但这似乎已经被淘汰了。

4

4 回答 4

7

听说 Db4O 提供的 Data Replication Service 非常好。它允许您使用 Hibernate 回到 RDBMS - 我认为它不支持 JDBC(http://www.db4o.com/about/productinformation/drs/Default.aspx?AspxAutoDetectCookieSupport=1

有一个开源项目叫Daffodil,但我完全没有研究过。( https://daffodilreplicator.dev.java.net/ )

我目前正在考虑使用的一个叫做 SymmetricDS ( http://symmetricds.sourceforge.net/ )

还有其他人,他们每个人的做法都略有不同。有些使用触发器,有些使用轮询,有些使用拦截 JDBC 驱动程序。您需要确定您所受的技术限制,以确定您真正想要使用的限制。

Wikipedia 很好地概述了不同的技术(http://en.wikipedia.org/wiki/Multi-master_replication),还提供了另一个替代 DBReplicator 的链接(http://dbreplicator.org/)。

于 2008-10-10T11:23:12.860 回答
2

如果您的代码库已经存在模型和 DAO 层,您可以创建自己的同步框架,这并不难。

复制数据很简单:

  1. 从数据库 A 中读取一个对象
  2. 删除数据库元数据(uuid 等)
  3. 插入数据库 B

同步对已经同步的内容有一定程度的了解。您可以在运行时通过从 TableInA 和 TableInB 获取 uuid 列表并确定哪些条目是新条目来执行此操作,或者您可以拥有需要同步的项目表(在 TableInA 中插入/更新时使用触发器填充) ,并从中运行。您的工具可以是 TimerTask,以便数据库以您希望的时间粒度保持同步。

然而,可能有一些工具可以在没有任何这种实现的情况下完成这一切,而且每种实现都会根据业务需求而有所不同。此外,在数据库级别还会有复制工具。

于 2008-10-10T11:43:35.210 回答
2

真正的同步需要一些我希望您的数据库架构拥有的数据(您可以阅读 SyncML 文档以了解它们是如何进行的)。Sync4J 对您帮助不大,它确实是高级且面向 XML 的。如果您没有预见到任何冲突(这意味着:非常容易同步),您可以尝试使用像Enhydra Octopus这样的轻量级 ETL 。

于 2008-10-12T23:59:31.277 回答
0

我目前主要使用 Oracle,我遇到的功能最全的路线是 Red Gate 的 Data Compare:

http://www.red-gate.com/products/oracle-development/data-compare-for-oracle/

这个旧博客很好地总结了可用的解决方案路线:

http://www.novell.com/coolsolutions/feature/17995.html

我遇到的特定于 JDBC 的产品非常基础。如果您想沿着发布-订阅路线走下去,Aidos 提到的解决方案似乎功能最完整:

http://symmetricds.codehaus.org/

希望这可以帮助。

于 2012-05-27T09:44:33.993 回答