Репликация баз данных. Обновление на подписчике (реплике). Как реализовать?
Здравствуйте.
Есть десктопное приложение насписанное мной для работы (Qt). Данные хранятся удалённо в MySQL. Появилась необходимость заставить работать программу без интернета.
Подумал прикрутить SQLite и настроить репликацию. Если нет готовых решений, то подскажите, какие есть подходы для репликации с возможностью записи на реплике?
P.S. База до 10000 записей. 3 пользователя (= 3 реплики), то есть update/insert не частое явление. Интернет канал периодически бывает очень узким.
Нормального и легкого решения тут нет. В двунаправленной репликации много подводный камней.
Если используете ORM для доступа к данным, храните данные локально в том же mysql под приложением, когда появляется связь с основным сервером записывайте изменения, после выкачивайте все данные.
Спасибо за ответ. На , что делать, когда данные на серверном мастере (я же правильно понимаю, такая репликация называется мастер-мастер) свежее, чем на клиентском, а клиентский мастер хочет сделать update. Eдинственное, что пришло в голову, учитывать время создания запроса и считать при подключении к серверу рассинхрон во времени. Такой подход не кажется мне очень стабильным, к сожалению.
timao: я и говорю, в двунаправленной репликации мастер-мастер то, что вы описали это самая мелкая проблема, хуже, когда обратно пытаются вставиться несколько записей с одинаковыми id с разных slave.
На мой взгляд лучшый вариант - описанный мною, без репликации. Но вам оябзательно нужно учитывать логику на уровне приложения при осуществлении update.