Лучшие практики / Шаблоны для двусторонней синхронизации данных

52

Довольно часто в моей работе возникает идея двусторонней синхронизации данных между системами баз данных. Классический пример - две слегка отличающиеся системы CRM (скажем, Raiser's Edge и Salesforce) и необходимость двухсторонней синхронизации данных контактов между ними.

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

Например, вы должны следить за:

  • Можете ли вы легко определить, какие записи были изменены в обеих системах (или вам придется сравнивать все записи между системами для обнаружения изменений)
  • Если вы собираетесь выполнять синхронизацию один раз в N часов, как бороться с конфликтами, когда одна и та же запись изменяется в более или менее одинаковое время в обеих системах
  • Если вы собираетесь выполнять синхронизацию в реальном времени (то есть, обновление в одной системе немедленно запускает обновление для другой системы), как справляться с расхождением во времени из-за ошибок или сбоев системы

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

codeulike
источник
то, что вы описываете, звучит довольно близко к системе федеративных баз данных - это правильно?
комнат
@gnat: Спасибо за ссылку, некоторые проблемы схожи (например, в отношении неоднородности), но я говорю о синхронизации подмножества данных из двух автономных баз данных, тогда как, похоже, это больше о создании полностью интегрированного представления всего через несколько дб.
Codeulike
1
7 лет спустя, 50 голосов, но только 1 достойный ответ. Там должны быть какие-то шаблоны синхронизации или лучшие практики там?
Codeulike

Ответы:

8

Да, сложная проблема, которую легко недооценить. И может быть много работы. Если вы используете технологии Microsoft, вы можете взглянуть на Microsoft Sync Framework здесь и здесь .

codingoutloud
источник
1
Спасибо, это интересно. Я слышал о Ms Sync Framework, но не понял, что это так обобщенно. В основном это шаблон для решения проблем синхронизации в целом.
codeulike
2
Microsoft Sync Framework был заменен Microsoft Sync Framework Toolkit.
Томас Кубес
Я разочарован документами, которые не очень понятны, особенно для поставщиков данных, не являющихся SQL-Server ADO.NET, как в моем случае. Кроме того, мое рабочее место ищет что-то, что не требует добавления таблиц инфраструктуры / внесения изменений в производственную среду. Так что я собираюсь отказаться от этого.
Веверке
0

Существует много теорий о синхронизации удаленных БД сайта. Сначала начните с INSERT. справиться с этим легко - вы можете создать уникальный идентификатор для каждого сайта (например, инициал имени сайта + идентификатор (номер): site_a_177 против site_b_53)

Так что вставка не должна создавать никаких конфликтов. проблема в обновлении. Я не верю, что существует метод 100% защиты от сбоев, но вы можете запустить обновление, «заблокировав» запись в удаленной БД, и только после того, как вы получите дескриптор, - продолжите обновление и завершите синхронизацией обновления. и только тогда отпустите замок.

alfasin
источник
1
Спасибо, я думаю, что вы говорите о распределенных БД с той же схемой и имеете дело с распределенными транзакциями. Я думаю больше о сценариях, в которых две БД полностью автономны (например, они назначают уникальные идентификаторы совершенно разными способами и схемы различаются), но вы хотите синхронизировать подмножество данных в них.
codeulike
Похоже, не должно быть никаких конфликтов. В этом случае это должно быть очень просто - просто сохраните «последний идентификатор записи», который был синхронизирован для каждой таблицы, и продолжайте оттуда.
alfasin