Синхронизация / обновление баз данных sqlite

У нас есть приложение для Android и приложение для iPhone (с той же функциональностью), которые используют sqlite для локального хранения данных. Приложения изначально поставляются без данных, затем при первом запуске они получают данные с удаленного сервера и сохраняют их в базе данных sqlite. База данных sqlite создается сервером, и приложения загружают ее как один файл, который затем используется для покупки приложений. Файл базы данных не очень большой по сегодняшним меркам, но и не маленький - около 5-6 МБ.

Теперь приложениям время от времени необходимо обновлять данные с сервера. Я могу придумать несколько подходов:

  1. Загрузить новую полную базу данных с сервера и заменить существующую. Это звучит как самый простой способ справиться с проблемой, если бы не повторяющиеся загрузки 5-6 МБ.Приложения действительно спрашивают пользователя, хотят ли они загрузить обновления, поэтому это не может быть большой проблемой.

  2. Загрузите базу данных дельты с сервера, содержащую только новые / измененные записи и в некоторой форме информацию о том, какие записи нужно удалить. Это привело бы к гораздо меньшему размеру загрузки, но работа на стороне клиента сложнее. Мне нужно было бы прочитать одну базу данных и, основываясь на прочитанном, обновить другую. Насколько мне известно, с помощью sqlite невозможно сделать что-то вроде insert в db1.table1 (выберите * from db2.table1) , где db1 и db2 ] - это две базы данных sqlite, содержащие table1 одинаковой структуры. (Полная база данных sqlite содержит около 10 таблиц, самая большая из которых, вероятно, содержит около 500 записей.)

  3. Загрузите дельту данных в каком-либо другом формате (json, xml и т. Д.) И используйте эту информацию для обновления базы данных. в приложении. То же, что и раньше: не так много проблем на стороне сервера, размер загрузки меньше, чем у полной базы данных, но довольно болезненный процесс обновления.

Какой из трех подходов вы рекомендуете? Или, может быть, я пропустил еще один способ?

Заранее большое спасибо.

6
задан Aleks G 29 February 2012 в 13:16
поделиться