Довольно часто в моей работе возникает идея двусторонней синхронизации данных между системами баз данных. Классический пример - две слегка отличающиеся системы CRM (скажем, Raiser's Edge и Salesforce) и необходимость двухсторонней синхронизации данных контактов между ними.
Помимо соображений API, при условии, что у вас есть общий ключ для синхронизации, и просто размышления об используемом алгоритме / шаблоне, эта задача часто недооценивается нетехнологами.
Например, вы должны следить за:
- Можете ли вы легко определить, какие записи были изменены в обеих системах (или вам придется сравнивать все записи между системами для обнаружения изменений)
- Если вы собираетесь выполнять синхронизацию один раз в N часов, как бороться с конфликтами, когда одна и та же запись изменяется в более или менее одинаковое время в обеих системах
- Если вы собираетесь выполнять синхронизацию в реальном времени (то есть, обновление в одной системе немедленно запускает обновление для другой системы), как справляться с расхождением во времени из-за ошибок или сбоев системы
Лично я могу думать о способах решения всего этого, но мне интересно, есть ли какие-либо хорошо известные образцы, литература или лучшие практики, на которые я мог бы сослаться.