Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

Внутри уровня БД реализовано 2 варианта:

litereplica (репликация одного направления, инкрементное резервное копирование в реальном времени)

{ Characteristics: [
  "replica db is binary equivalent of main db when synchronized",
  "replica db is read-only",
  "all the db is replicated" ],
Split Brain: "not applicable, as it is single master",
Additional Features: "Point-in-time recovery, encryption using ChaCha",
Interface: "native SQLite. Existing wrappers for SQLite can be used",
Notes: "does not support WAL",
License: "commercial" }

litesync (репликация и синхронизация с несколькими мастерами)

{ Characteristics: [
   "can write to the db even when it is off-line",
   "fast (first write to local db, then synchronize using a worker thread)",
   "avoids insert id collisions using modified rowids" ],
Split Brain: "does not occur because it uses a star topology",
Additional Features: "encryption using ChaCha",
Interface: "native SQLite. Existing wrappers for SQLite can be used",
Notes: "use attached db for replication of only some tables",
License: "commercial" }

Ответ 3

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

Ответ 4

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

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

Litereplica: http://litereplica.io/ Только в одну сторону. Кажется, было немного.

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

Ответ 5

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

Ответ 6

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

Если вам действительно нужен SQL-тип клиентского/серверного типа RDBMS, вы можете взглянуть на SQLiteDBMS.

Ответ 7

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