Поддерживает ли SQLite репликацию?

в приложении, которое внедряет SQLite3 и использует базу данных в памяти, можно ли реплицировать базу данных между двумя запущенными экземплярами приложения? Я мог бы сделать это вручную с помощью протокола homebrew, дублирующего все мои доступы к БД, но это похоже на то, что должно быть сделано внутри уровня БД.

6 ответов


подход грубой силы: отправьте его ".команда "дамп" для создания текстового представления данных. Считайте эти данные во вторую базу данных. Не уверен, что ты сможешь это использовать.

Если вам нужно мелкозернистое обновление (отправка копии каждого до другой копии), посмотрите на sqlite3_update_hook

а как вы планируете обрабатывать ошибки? Например, что происходит, когда копия БД в app2 не может сделать обновление по какой-либо причине?

чтобы решить эту проблему, переместите базу данных на серверный процесс и попросите два приложения поговорить с ней.


Lsyncd-Живая Синхронизация (Зеркало) Демон может быть полезен здесь. Он использует rsync для непрерывной репликации на уровне файлов.


Если вы хотите репликацию в базе данных в памяти, вам нужно посмотреть berkeley DB (BDB). Однако модель данных для BDB является строковым словарем, поэтому вы теряете гибкость SQL. кроме того, у него есть лицензия на три пункта, поэтому, если ваш проект является коммерческим, вам нужно получить лицензии.


из коробки, нет. Существует небольшое количество сторонних опций:

SQLite sync:https://ampliapps.com/sqlite-sync/ это кажется привлекательным, потому что он может реплицироваться в другие базы данных, а также SQLite, и не изменяет движок SQLite. Я еще не пробовал.

Litereplica:http://litereplica.io/ Один путь только. Кажется, немного повидал.

LiteSync: http://litesync.io/ Двусторонняя репликация. Довольно новая, но эволюция Litereplica так, вероятно, более зрелая, чем кажется. Я попробовал это немного, и он, похоже, работает гладко, с несколькими ошибками, на которые смотрит разработчик. Вы должны использовать модифицированный движок SQLite разработчика,который кажется зависимостью. Вы также не получаете большого контроля, например, вы не можете сказать replicate now без повторного открытия базы данных.


нет, это не так, потому что область проекта является простой базой данных в процессе. Но поскольку база данных-это всего лишь один файл, вы можете написать свой собственный сценарий репликации на основе простых операций копирования файлов, rsync или чего-то подобного.

Если вы действительно хотите тип клиента/сервера на основе SQLite СУБД, вы можете взглянуть на SQLiteDBMS.


унисон? Лучшее, что вы могли сделать, было горячим запасным, потому что SQLite db в одном монолитном файле. Между этими двумя "примерами"нельзя было сделать круг. Hot spare не плох, вы просто выбираете другое приложение+db без особой суеты, сравниваете с MySQL master-slave или active-passive, где есть некоторое ручное вмешательство, которое нелегко. Репликация MySQL проходит вокруг SQL, а не просто отличается, как unison/rsync. Но в унисон у вас есть мастер-мастер.