2016-08-12 1 views
0

У меня есть удаленная база данных, которая может быть изменена в любое время. Мне нужно найти способ сохранить обновление базы данных sqlite со всеми изменениями в лучшем и оптимизированном виде.База данных Sync Cloud от MySql до Sqlite Android

Я думал, имея единственную метку времени для каждой таблицы и отправить только обновленную таблицу клиенту будет одно решение, или, может быть, имея одну временную метку для каждой строки и отправить только обновленный ряд клиенту ..

Но - Как я могу управлять удаленными элементами, например? - как я могу управлять техническим обновлением Android?

В принципе, в некоторых словах, в какой-то момент в приложении, мне нужно загрузить изменения с помощью API и обновить локальный db.

Есть ли у кого-нибудь идеи?

Благодаря

+2

Сколько данных мы говорим здесь, сколько таблиц и строк в каждой из этих таблиц? Мы говорим о десятках строк в каждом столе или миллионах? –

+0

Мы говорим о 10-15 таблицах и сотнях или записях, возможно, до 200-300. – dvdciri

ответ

0

Я решил следовать другой подход:

Я создал апи, что синтаксический анализ БД Mysql в БД SQLite на стороне сервера. Существует «last_update_timestap», который будет обновляться каждый раз, когда что-то будет изменено.

Другой вызов api дает в заголовке дополнительное поле, содержащее эту метку времени.

На стороне клиента есть процесс синхронизации, что делать последующие при необходимости:

  1. Api вызов извлечения только ЗАГОЛОВОК, получение последнего обновления метки времени и проверки, если требуется обновление;

  2. Если необходимо скачать базу данных из другой апи

  3. Написать базу данных во временный файл и скопировать этот временный файл в положении и с тем же именем реальной базы данных
  4. Использование базы данных

Спасибо всем за помощь, но это оказалось подходящим подходом для моей проектной структуры.

+0

Вы можете показать, как разделить mysql db на sqlite db на стороне сервера? благодаря – Ilario

0

Так как кажется, что это односторонняя только синхронизация, я бы:

  • Сделать каждую таблицу на сервере БД есть столбец UUID и последний обновленный даты/времени колонка.

  • Создайте вызов REST, который запросит обновленные данные. В идеале, было бы , чтобы клиент обновлялся. Эта дата должна исходить от сервера во время вызова обновления.

  • Сервер будет сканировать каждую таблицу, ища строки, имеющие дату>, чем прошедшая дата. Сериализуйте данные и верните их как JSON вместе с датой/временем сервера для следующего запроса.

Теперь отслеживание удалений - это немного больше работы. Вы можете:

  1. Никогда не удаляйте данные и не указывайте только те строки, которые были удалены, это самый простой, но в зависимости от ваших данных может закончиться множество строк в БД.
  2. Удалите данные, а затем отследите удаленные строки в другой таблице. Они могут быть удалены через некоторое время и если/когда все клиенты были обновлены.
  3. У вас есть второй вызов для обновления, который будет сбрасывать все значения UUID и метки времени для каждой строки. Затем клиент может определить, какие строки нужно удалить.

Хотя это самый сложный вариант, я бы выбрал вариант 3, так как мне не нравятся старые данные. Направление, в котором я буду идти, будет также зависеть от того, сколько клиентов будет синхронизироваться с БД.

+0

В каком формате json вы отправите запрос на обновление клиенту? – dvdciri

+0

Я бы, вероятно, создал POJO, представляющий каждую таблицу и объект верхнего уровня, который включает в себя все таблицы, допускающие несколько строк в каждой таблице. Используйте Gson или Jackson для маршалирования данных. –