@Nickellick

Как синхронизировать базу данных между сервером (PostgreSQL) и клиентом (SQLite)?

Интересует односторонняя синхронизация (репликация) от сервера к клиенту. На сервере крутится БД PostgreSQL, на клиенте (Android) - SQLite. Как лучше всего их синхронизировать? Создавать бэкап базы данных на сервере, переводить в формат SQLite и просто передавать клиенту в виде файла базы данных? Либо же есть более элегантный способ? Если БД будет большой, то "слишком жирно" каждый раз передавать её всю
  • Вопрос задан
  • 1101 просмотр
Решения вопроса 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Поищите вот тут.
https://www.google.com/search?q=postgresql+sqlite+...

Если сугубо руками. То нужно сделать следующее, не важно через веб сервис или через sqldump

1. Перенос всех словарей (1 раз)
2. Перенос всех данных или поднабора (1 раз)
3. Процесс синхронизации клиента и сервера (много раз)

Итак п.1 в данный момент формируется схема обмена данными и фиксируется, важно что бы в дальнейшем учитывать изменения в БД. Перенос происходит на клиент либо руками, либо с помощью сервиса.
GET /api/dbsync/getdictionaries/
{
"schema": "0.4",
[ 
{ "name":"cityes", "sql": "create table ....."},
.....
]
}


где передается схема и дата начала
GET /api/dbsync/getdata/0.4/31.05.2020
Этот запрос отдает поднабор данных или просто список таблиц которые нужно создать.
обратите внимание на первичные ключи, желательно что бы они были типа UUID или GUID
либо таблицы содержали служебные поля позволяющие идентифицировать пользователя.
Кроме того необходимы поля created, updated
Также важно что бы данные отдавались конкретно для этого пользователя. Типичный пример таблица users будет содержать только его, и возможно список его подчиненных, а таблица customer только его заказчиков

пункт 3
GET /api/dbsync/sync/0.4/31.05.2020
получение с сервера только дельты данных на указанный период

POST /api/dbsync/sync/0.4
логика клиента формирует пакет изменений, сервер сам разбирается что закоммитить, а на какие данные ругнуться, мол уже исправлено это какие изменения оставить.
В ответ выдается список статусов для каждой записи.

Вот примерная простая схема.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
samodum
@samodum
Какой вопрос - такой и ответ
Это довольно сложная тема.
Обычно делают так, чтобы первый раз брать всю базу, а потом только изменения, чтобы не скачивать огромную базу каждый раз.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы