Какие инструменты JDBC вы используете для синхронизации источников данных?

Я надеюсь узнать, какие инструменты используются для синхронизации данных между базами данных. Я ищу решение JDBC, которое можно использовать в качестве инструмента командной строки.

Раньше существовал инструмент под названием Sync4J, который использовал структуру SyncML, но это, похоже, упало на обочине.

Ответы

Ответ 1

Я слышал, что Служба репликации данных, предоставляемая Db4O, действительно хороша. Это позволяет использовать Hibernate для возврата на РСУБД - я не думаю, что он поддерживает JDBC tho (http://www.db4o.com/about/productinformation/drs/Default.aspx?AspxAutoDetectCookieSupport=1)

Существует проект с открытым исходным кодом под названием Daffodil, но я его совсем не исследовал. (https://daffodilreplicator.dev.java.net/)

Тот, который я сейчас рассматриваю, используется как SymmetricDS (http://symmetricds.sourceforge.net/)

Есть и другие, каждый из них делает это несколько иначе. Некоторые используют триггеры, некоторые опросы, некоторые используют перехват JDBC-драйверов. Вам нужно решить, какие технические ограничения вы используете, чтобы определить, какой из них вы действительно хотите использовать.

Википедия дает хороший обзор различных методов (http://en.wikipedia.org/wiki/Multi-master_replication), а также предоставляет ссылку на другой альтернативный DBReplicator (http://dbreplicator.org/).

Ответ 2

Если у вас есть модель и слой DAO, который уже существует для вашей кодовой базы, вы можете просто создать свою собственную структуру синхронизации, это не сложно.

Копировать данные так же просто, как:

  • прочитать объект из базы данных A
  • удалить метаданные базы данных (uuid и т.д.)
  • вставить в базу данных B

Syncing имеет некоторый уровень знаний о том, что уже было синхронизировано. Вы можете либо сделать это во время выполнения, получив список uuids из TableInA и TableInB и разработав, какие записи являются новыми, или вы можете иметь таблицу элементов, которые необходимо синхронизировать (заполнять триггером при вставке/обновлении в TableInA), и бежать от этого. Ваш инструмент может быть TimerTask, поэтому базы данных сохраняются синхронизированными во время детализации, которые вы хотите.

Однако есть, вероятно, какой-то инструмент, который делает все это без какой-либо из этих реализаций реализации, и каждая реализация будет по-разному основана на бизнес-потребностях. Кроме того, на уровне базы данных будут инструменты репликации.

Ответ 3

Для истинной синхронизации требуются некоторые данные, на которые я надеюсь, что ваша схема базы данных (вы можете прочитать документ SyncML, чтобы узнать, как они работают). Sync4J не поможет вам, это действительно высокоуровневый и ориентированный на XML. Если вы не предвидите никаких конфликтов (что означает: очень простая синхронизация), вы можете попробовать с легким ETL, например Enhydra Octopus.

Ответ 4

В первую очередь я использую 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/

Надеюсь, что это поможет.