Вопрос

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

Литереплика: http://litereplica.io/ Только в одном направлении.Кажется, он был здесь какое-то время.

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top