Обновление двух разных баз данных одновременно - PullRequest
2 голосов
/ 02 декабря 2011

Допустим, у меня есть две базы данных примерно так:

База данных A

создать таблицу Table1 (field1 int, field2 int,field3 int)

База данныхB

создать таблицу Table1 (field1 int, field2 int)

Наше старое приложение использует B и должно продолжать это делать.Мы разрабатываем новое приложение, которое будет использовать A .Как лучше всего убедиться, что все изменения в A: Таблица1 реплицированы в B: Таблица1 ?


Вот несколько вещей, которые следует учитывать:

  • Старое приложение будет работать только selects в B: Table1 , нет необходимости всинхронизация идет в обе стороны.
  • Старое приложение должно продолжать использовать B .
  • Большинство полей в A: Таблица1 - это то же самое, что и B: Table1 , но в некоторых случаях потребуется преобразование данных определенного типа.
  • Производительность не является большой проблемой, потому что не будетмного изменений.
  • Сначала будет синхронизировано только 1-2 таблицы, но по мере переноса большего количества модулей в новую версию будет добавляться больше таблиц.
  • Обе базы данных от разных поставщиков.

Вот варианты, которые я рассмотрел:

  • В новом приложении обновите две базы данных:
    Мне не нравится эта опция, потому что она добавляет много сложности в новый слой данных приложения, и нетОперации между двумя базами данных
  • Использование триггеров в A для запуска application, который будет повторять изменения в B
    Notуверен, что это хорошая практика и насколько она надежна
  • Использование триггеров в A для запуска stored procedure для репликации изменений
    Некоторые изпреобразование данных может быть слишком сложным для выполнения в хранимой процедуре
  • Запуск приложения или хранимой процедуры с заданным интервалом для внесения изменений
    Не в реальном времени, поэтому я бы предпочелне используйте это

Какие у вас проблемы с этим?
Я пропустил другой вариант?
Вы когда-нибудь делали что-то подобное?
Есть липрограммное обеспечение (бесплатное или нет), которое может сделать эту работу?

Как всегда, спасибо всем за ваше время и ваш вклад.

Ответы [ 2 ]

2 голосов
/ 02 декабря 2011

У вас есть много вариантов здесь ...

  • Вы можете связать серверы и применить обновления в транзакции.Это если базы данных не на одном сервере.
  • Вы можете использовать Service Broker для обеспечения гарантированных асинхронных обновлений для другого сервера.
  • Доставка журналов также позволит другому серверу получать обновления практически в режиме реального времени.

В конце вам нужно будет прочитать больше о каждом и принять решениекоторый лучше всего соответствует вашим потребностям.Это будет компромисс между надежностью и производительностью.

Судя по информации только в вашем вопросе, Service Broker подойдет лучше всего.Вы по-прежнему можете использовать триггеры для вызова посредника, который затем отвечает асинхронно.

0 голосов
/ 02 декабря 2011

Что вы думаете о репликации транзакций?Вы можете реплицировать только определенные столбцы и можете создавать собственные хранимые процедуры для вставки, обновления и удаления.Он также асинхронный, так что ваше новое приложение не должно быть связано с ним.

...