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