2009-12-13 2 views
3

У меня есть 2 гетерогенных баз данных. Один в mysql и один в мс sql.Синхронизация двух гетерогенных баз данных

Я хочу, чтобы они синхронизировались.

Там будет поток данных периодически и поток информации будет оба способа

Каждый получил какие-либо стратегии/подходы к нему?

ответ

0

Ананд, вы можете найти это в Google.

sync mysql and mssql

Я не использовал это программное обеспечение, но они предлагают бесплатную пробную версию

+0

да проверено это, но я не хочу коммерческого решения. Я хочу разработать один самостоятельно, только в худшем случае я пойду на коммерческое решение –

+0

классные бананы, я неправильно понял ваш вопрос –

2

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

Full Extract и Delta
Возьмите полный, отсортированный по ключу, сброс каждой строки в таблице (ы) вы хотите синхронизировать и сравнить его строка за строкой на свалку от последнего sync вы побежали. Имея выход отсортированных делает процесс сравнения гораздо быстрее, так как вы можете выяснить, если строка была изменена, удалена или удалены без

  • Pro: Гарантированно, чтобы захватить все изменения.
  • Pro: Простой в применении.
  • Con: Медленный.
  • Con: Будет создавать большую нагрузку на базу данных при запуске.

Этот вариант должен быть вполне жизнеспособным для баз данных меньшего или среднего размера.

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

  • Pro: быстрее, так как это не нужно читать все из базы данных
  • Pro: Еще сравнительно просто реализовать
  • Con: АБД иногда приходится очищать журналы для решения производственных проблем. Это может привести к пропущенным изменениям, которые не синхронизируются.

Возможно, хорошая идея, если вы можете рассчитывать на доступные журналы.

Триггеры
Использование триггеров для записи изменений, и тиражировать их в другой базе данных.

  • Pro: быстро, как это захватывает только изменения.
  • Con: добавляет накладные к каждой сделке

синхронизации в Заявке
Просто убедитесь, что приложение записывает обе базы данных.

  • Pro: Отсутствие реальных накладных расходов для базы данных.
  • Con: Ненадежный. Все, что требуется, - это один человек, забывающий писать в обе базы данных.

Это может быть сделано для работы, если приложение записывает в базу данных только через несколько контролируемых модулей (т. В менее управляемой настройке (т. Е. Несколько приложений/неконтролируемый или плохо реализованный доступ к базе данных/специальные скрипты) это просто не вариант.

+0

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

+0

Хорошо, что вокруг этой проблемы не так много. Вам придется сесть и подумать, как данные из одной базы данных отображаются на другую базу данных. Там нет простого ответа, все его приложения специфичны. –

+0

Да, я согласен с тем, что мне нужно сделать сопоставление и что оно специфично для приложения. Спасибо за предложения. Вы положили вещи в лучшую сторону для меня –

0

Первый подробнее нужно:

  • сколько времени ожидания в syncrhonization вы можете себе позволить? 5 секунд? 5 часов? 15 часов? и т. д.
  • сколько трансформаций между базами данных? Ничто или тривиальные изменения, которые могут быть обработаны в представлении, или что-то более существенное?
  • Каковы объемы данных? Насколько велики таблицы, сколько данных ежедневно меняется, и разделены ли данные?
  • Каковы требования к параллелизму? Можете ли вы отключить доступ пользователей в течение нескольких минут?
  • будут ли двунаправленные изменения появляться в одной таблице или в разных таблицах?
  • Каковы требования к качеству данных? нормально ли, если две разные транзакции, каждая из которых в одной и той же таблице в одной и той же таблице, но в разных базах данных, обновляется примерно в одно и то же время - и один шаг с другой?
  • Что такое зернистость? вам нужно реплицировать каждую транзакцию, которая имеет место, или только текущий моментальный снимок в определенный момент времени (даже если этот момент времени составляет каждые 5 минут)?

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

Если вам не нужна синхронизация в реальном времени, у вас есть обширные объемы данных или есть значительные требования к трансформации, тогда вы получите решение ETL. Есть довольно много на выбор, но они в основном коммерческие.С другой стороны, их нетрудно развить самостоятельно - если у вас есть время, чтобы понять лучшие практики. Что странно, на самом деле не говорят о многом. Во всяком случае, Adam Luchjenbroers хорошо справился с определением большинства подходов к ETL. Я рекомендую использовать дельта-файл, если вы можете позволить себе потерять транзакции между моментальными снимками, поскольку в противном случае это самый точный подход, поскольку все остальные полагаются на отметки времени, триггеры или журналы, которые не фиксируют все изменения.

+0

Привет, даю спасибо за подробное объяснение Ну, я могу позволить себе латентность, например, 15 минут. Как насчет того, чтобы иметь работу ping мой стол каждые 10 минут и посмотреть, если он обновлен на основе последней отметки времени, а затем выполните операцию синхронизации? –

+0

Если ваша временная метка проиндексирована (или ваши таблицы невелики), и количество изменений данных каждые 10 минут достаточно мало, то это должно работать. Вы можете сделать что-то особенное для обнаружения удалений - например, использовать триггер для копирования удаленной строки (или просто pk) в таблицу захвата. Нагрузки, вероятно, также будут невидимы для вас, но они менее распространены. – KenFar

0

Взгляните на synchrodb.com

SynchroDB сравнивает содержимое двух баз данных и обновляет содержимое базы данных назначения в соответствии с параметрами и содержимым базы данных.

SynchroDB использует концепцию функциональных клавиш для сопоставления строк в исходной и целевой базе данных.

SynchroDB очень настраиваемый. По умолчанию:

• Чтобы вставить в базу данных назначения строки, в которые она не указана.

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

• Чтобы удалить из базы данных назначения строки, отсутствующие в исходной базе данных.

SynchroDB является бесплатным.

 Смежные вопросы

  • Нет связанных вопросов^_^