Мы разрабатываем две взаимосвязанные системы. Один из них (A) будет установлен на машинах наших клиентов. Остальные (B) будут использоваться моей организацией.
Каждая система имеет свою собственную базу данных (реляционную), и их схемы различаются. Однако обе системы должны быть синхронизированы. Кроме того, некоторые изменения в B необходимо экспортировать во все системы класса A, а другие - только в конкретную.
У некоторых клиентов нет подключения к Интернету, поэтому синхронизацию в некоторых случаях следует выполнять посредством обмена файлами.
Итак, мы планируем решить эту проблему следующим образом:
- Каждая система ведет журнал изменений своей базы данных. Мы планируем реализовать это с MongoDB.
- Когда система инициализирует процесс синхронизации, она извлекает все внесенные изменения из журнала. Если система B, полученные изменения зависят от пункта назначения. Затем система сериализует их в формате XML и, наконец, отправляет их (через файл или сеть).
- Когда другая конечная точка получает набор изменений, она десериализует их. Затем система выполняет некоторые преобразования данных, которые могут быть необходимы, и, наконец, записывает изменения. На этом этапе, если это необходимо, система должна разрешить конфликты, которые могут существовать.
- Наконец, система-получатель отправляет свои изменения (и другие продукты разрешения конфликтов).
Является ли этот подход осуществимым, масштабируемым и элегантным? Какие изменения или дополнения вы бы сделали?