(Несколько источников данных) Зеркальное отображение данных с помощью hibernate + spring - PullRequest
1 голос
/ 18 февраля 2011

Использование базы данных hibernate + spring + AS400 в веб-приложении:

Существует 3 источника данных (по одному на регион), DS для Австралии, DS для Великобритании и DS для США. Схемы одинаковы во всех источниках данных.

Теперь данные должны быть сохранены в источнике данных, правило состоит в том, что основной регион (выбранный конечным пользователем с помощью пользовательского интерфейса) всегда должен использоваться в качестве основного источника данных для сохранения данных. Кроме того, если основным регионом является не США (например, выбранный пользователем регион Великобритании), данные должны быть сохранены как в источнике данных Великобритании, так и в источнике данных США.

Мне известен простой ручной подход - открыть все фабрики сессий и управлять всем вручную. http://www.java -forums.org / баз данных / 867-зимует-множественного databases.html

Какие есть другие альтернативы и как лучше всего это реализовать?

Ответы [ 2 ]

0 голосов
/ 12 апреля 2011

Подход системного уровня (iSeries) будет заключаться в том, чтобы разрешить удаленное ведение журнала вашего источника данных в Австралии и Великобритании на американском сайте, и чтобы американский сайт применял изменения журнала к своей локальной DB2.Обратите внимание, что источники SQL в DB2 / 400 всегда записываются в журнал (для обеспечения возможностей управления фиксацией), поэтому вам просто нужно включить удаленное ведение журнала.Для обзора этой функции перейдите на http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Fcl%2Fapyjrnchg.htm или аналогичный в зависимости от версии вашей ОС.

Альтернативой разработке собственной программы, которая применяет изменения журнала, является использование одного из пакетных решений для репликации -- IBM DataReplicator, ODS / ODM Vision Solutions и т. Д.

0 голосов
/ 18 февраля 2011

Должен ли он быть кислотным?Если нет, моей первой идеей было бы добавить @PostPersist, который добавляет сущность в тему JMS, которую читают 3 клиента, каждый из которых представляет одну базу данных.Затем каждый клиент проверяет, обновлен ли объект в его базе данных (например, путем проверки столбца оптимистической блокировки).

При таком подходе у вас могут возникнуть проблемы с согласованностью данных, и вам придется реагировать на каждый сбой для каждого клиента.С другой стороны, вы бы избежали задержки (именно поэтому у вас есть 3 источника данных в первую очередь).

Но на самом деле есть несколько возможных решений: -)

...