Краща практика / Шаблони для двосторонньої синхронізації даних


52

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

Розгляд міркувань API, окрім припущення, що у вас є спільний ключ для синхронізації та чітко продуманий алгоритм / шаблон, який слід використовувати, це завдання, яке часто недооцінюють нетехнологи.

Наприклад, ви повинні стежити за:

  • Чи можете ви легко визначити, які записи змінилися в обох системах (або вам доведеться порівнювати всі записи між системами, щоб виявити зміни)
  • Якщо ви збираєтесь синхронізувати один раз на N-години, як вирішити конфлікти, коли однаковий запис змінюється в більш-менш один і той же час в обох системах
  • Якщо ви збираєтеся синхронізувати в режимі реального часу (тобто оновлення в одній системі негайно запускає оновлення в іншій системі), як впоратися з розбіжністю в часі через помилки або збої в системі

Особисто я можу придумати шляхи вирішення всього цього, але мені цікаво, чи є якісь відомі зразки, література чи найкращі практики, до яких я можу звернутися.


те, що ви описуєте, звучить досить близько до системи федеральних баз даних - це правильно?
гнат

@gnat: Дякую за посилання, деякі проблеми є схожими (наприклад, стосуються неоднорідності), але я говорю про синхронізацію підмножини даних з двох автономних баз даних, тоді як це, мабуть, стосується створення повністю інтегрованого уявлення про все через кілька dbs.
codeulike

1
Через 7 років 50 заявок, але лише 1 гідна відповідь. Повинні бути якісь схеми синхронізації чи найкращі практики?
codeulike

Відповіді:


8

Так, важка проблема, легко недооцінена. І може бути багато роботи. Якщо ви користуєтеся технологіями Microsoft, можливо, ви захочете ознайомитись із Microsoft Sync Framework тут і тут .


1
Дякую, це цікаво. Я чув про пані Sync Framework, але не розумів, що це так узагальнено. Це в основному є схемою для керування проблемами синхронізації загалом.
codeulike

2
Microsoft Sync Framework було замінено інструментарієм Microsoft Sync Framework.
Томаш Кубес

Я розчарований в документах, що не так зрозуміло, спеціально для постачальників даних ADO.NET, які не є SQL-сервером, і це мій випадок. Крім того, моє робоче місце шукає те, що не потребує додавання інфраструктурних таблиць / внесення змін у виробниче середовище. Тому я збираюся відкинути цю.
Веверке

0

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

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


1
Дякую, я думаю, ви говорите про розподілені dbs з тією ж схемою і маєте справу з розподіленими транзакціями. Я думаю більше про сценарії, коли два БД є повністю автономними (наприклад, вони призначають унікальні ідентифікатори абсолютно різними способами, а схеми відрізняються), але ви хочете синхронізувати підмножину даних у них.
codeulike

Здається, не повинно бути конфліктів. У цьому випадку це повинно бути дуже просто - просто збережіть "останній ідентифікатор запису", який був синхронізований для кожної таблиці, і продовжуйте звідти.
alfasin
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.