我希望找出人们用来在数据库之间同步数据的工具。我正在寻找可以用作命令行工具的 JDBC 解决方案。
曾经有一个名为 Sync4J 的工具使用 SyncML 框架,但这似乎已经被淘汰了。
我希望找出人们用来在数据库之间同步数据的工具。我正在寻找可以用作命令行工具的 JDBC 解决方案。
曾经有一个名为 Sync4J 的工具使用 SyncML 框架,但这似乎已经被淘汰了。
听说 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/)。
如果您的代码库已经存在模型和 DAO 层,您可以创建自己的同步框架,这并不难。
复制数据很简单:
同步对已经同步的内容有一定程度的了解。您可以在运行时通过从 TableInA 和 TableInB 获取 uuid 列表并确定哪些条目是新条目来执行此操作,或者您可以拥有需要同步的项目表(在 TableInA 中插入/更新时使用触发器填充) ,并从中运行。您的工具可以是 TimerTask,以便数据库以您希望的时间粒度保持同步。
然而,可能有一些工具可以在没有任何这种实现的情况下完成这一切,而且每种实现都会根据业务需求而有所不同。此外,在数据库级别还会有复制工具。
真正的同步需要一些我希望您的数据库架构拥有的数据(您可以阅读 SyncML 文档以了解它们是如何进行的)。Sync4J 对您帮助不大,它确实是高级且面向 XML 的。如果您没有预见到任何冲突(这意味着:非常容易同步),您可以尝试使用像Enhydra Octopus这样的轻量级 ETL 。
我目前主要使用 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/
希望这可以帮助。