Лучший способ синхронизировать базу данных клиента с базой данных сервера
У меня есть приложение регистрации данных (C#/.NET), которое записывает данные в базу данных SQLite. Эта база данных постоянно записывается во время работы приложения. Также возможно архивирование базы данных и создание новой базы данных, когда размер базы данных SQLite достигает предварительно определенного размера.
Я пишу веб-приложение для отчетности по данным. Моя веб-настройка C#/.NET с SQL Server. Клиенты смогут увидеть свои собственные данные, собранные в Интернете из своего экземпляра моего приложения.
В целях тестирования, чтобы загрузить данные для тестирования, я написал грубое и грязное приложение, которое в основном считывает данные из базы данных SQLite, а затем вводит данные в SQL Server с помощью SQL - я запускаю приложение один раз, чтобы заполнить базу данных SQL Server. онлайн.
Мое приложение написано на C# и является модульным, поэтому я могу добавить процесс, который периодически проверяет базу данных SQLite, а затем передает новые данные в пакетном режиме на мой SQL Server.
Мой вопрос заключается в том, что если бы я хотел постоянно синхронизировать клиентские базы данных SQLLite с моим сервером, поскольку приложение регистрирует данные, каким будет наилучший способ для этого?
Есть ли какие-либо технологии / стратегии, которые я должен изучить здесь? Любые рекомендуемые методы?
4 ответа
Вы можете взглянуть на Sync Framework. Насколько сложна схема, которую вы хотите синхронизировать, и является ли она односторонней или данные должны возвращаться?
В качестве простого решения я бы посмотрел на экспорт данных в некотором формате с разделителями, а затем с помощью bcp/BULK INSERT перенести их на ваш центральный сервер.
Несколько вариантов приходят на ум. Вы можете добавить отметку времени к каждой таблице, из которой вы хотите скопировать, а затем выбрать строки, записанные после последнего обновления. Это быстро и будет работать, если вы заархивируете базу данных и начнете с пустой.
Вы также можете записать свои обновления для каждой таблицы в строку XML, которая описывает изменения, и сохранить их в новой таблице, которая обрабатывается как очередь.
На Github существует проект с открытым исходным кодом, также доступный на Nuget. Он называется SyncWinR, он реализует инструментарий Sync Framework для включения синхронизации с WinRT или Windows Phone 8 и SQLite. Вы можете получить доступ к проекту с https://github.com/Mimetis/SyncWinRT.