Как реализовать синхронизацию локальной БД с сервером в десктопном приложении?
Добрый день.
Суть вопроса:
Представим, что есть .Net десктопное приложение с локальной БД, установленное у ряда клиентов, у каждого клиента своя база.
Нужно синхронизировать клиентские базы с сервером, чтобы "администратор сервера" мог смотреть статистику/отчеты по базам и т.д.
Планируется использовать в качестве сервера Azure. Как лучше организовать синхронизацию?
- SQL база данных на Azure + SQLite локально;
- Виртуальная машина с сервером MS SQL на Azure и допустим MSSQL Express локально?
Клиентам работать напрямую с сервером неудобно, ибо у них 90% рабочего времени нет доступа в интернет.
По ряду причин, предложенные варианты неудобны.
Смотрю в сторону SQLite для локального хранилища. На хабре найден пример синхронизации с Azure, НО эта схема работает с одной базой.
Попробуйте SymmetricDS, этот проект как раз посвящен синхронизации (репликации) в master-master архитектуре с учётом непостоянного соединения между узлами. Ажура вроде как поддерживается. Что ставить на кл иенте - зависит от размера и требований к базе. Скорее всего хватит SQLite.
Вы ищете MERGE replication, которая создана как раз для этого - офлайн клиенты периодически забирают данные с publisher'а, что-то делают в офлайне, потом синхноринизуются обратно с publisher'ом. В Azure у вас будет Publisher, офлайн клиенты - SQL Server Express в режиме Subscriber.