Довольно часто в моей работе возникает идея двусторонней синхронизации данных между системами баз данных. Классический пример - две слегка отличающиеся системы CRM (скажем, Raiser's Edge и Salesforce) и необходимость двухсторонней синхронизации данных контактов между ними.
Помимо соображений API, при условии, что у вас есть общий ключ для синхронизации, и просто размышления об используемом алгоритме / шаблоне, эта задача часто недооценивается нетехнологами.
Например, вы должны следить за:
- Можете ли вы легко определить, какие записи были изменены в обеих системах (или вам придется сравнивать все записи между системами для обнаружения изменений)
- Если вы собираетесь выполнять синхронизацию один раз в N часов, как бороться с конфликтами, когда одна и та же запись изменяется в более или менее одинаковое время в обеих системах
- Если вы собираетесь выполнять синхронизацию в реальном времени (то есть, обновление в одной системе немедленно запускает обновление для другой системы), как справляться с расхождением во времени из-за ошибок или сбоев системы
Лично я могу думать о способах решения всего этого, но мне интересно, есть ли какие-либо хорошо известные образцы, литература или лучшие практики, на которые я мог бы сослаться.
Ответы:
Да, сложная проблема, которую легко недооценить. И может быть много работы. Если вы используете технологии Microsoft, вы можете взглянуть на Microsoft Sync Framework здесь и здесь .
источник
Существует много теорий о синхронизации удаленных БД сайта. Сначала начните с INSERT. справиться с этим легко - вы можете создать уникальный идентификатор для каждого сайта (например, инициал имени сайта + идентификатор (номер): site_a_177 против site_b_53)
Так что вставка не должна создавать никаких конфликтов. проблема в обновлении. Я не верю, что существует метод 100% защиты от сбоев, но вы можете запустить обновление, «заблокировав» запись в удаленной БД, и только после того, как вы получите дескриптор, - продолжите обновление и завершите синхронизацией обновления. и только тогда отпустите замок.
источник