Схема синхронизации SQlite - PullRequest
       5

Схема синхронизации SQlite

0 голосов
/ 24 декабря 2009

Я знаю, что это канун Рождества, так что это идеальное время, чтобы найти хардкорных программистов онлайн:).

У меня есть файл sqlite db, который содержит запись более 10 КБ, я генерирую базу данных из базы данных mysql, я построил базу данных sqlite в моем приложении iphone обычным способом.

Записи содержат информацию о продуктах и ​​их ценах, магазинах и т. П., Эта информация, конечно, не является статичной, я использую автоматическую схему для заполнения и обновления моего mysql db.

Теперь, как я могу обновить базу данных sqlite приложения iphoen с помощью новой информации, доступной в базе данных mysql, структура базы данных остается прежней, но записи содержат новую информацию.

Спасибо. Ахед

информация: libsqlite3.0, iphone OS 3.1, MySQL 2005, Mac OS X 10.6.2

Ответы [ 3 ]

1 голос
/ 24 декабря 2009

У меня есть похожее приложение.

Я использую Push-уведомление, чтобы мои пользователи знали, что доступны новые или обновленные данные.

Каждый раз, когда запись на сервере обновляется, я сохраняю последовательный номер записи вместе с записью.

С каждым зарегистрированным UDID связан «последний обновленный» номер, который содержит самый большой номер записи, который он когда-либо скачивал.

Когда какое-либо устройство получает обновления, все записи базы данных, превышающие последний обновленный номер записи UDID, сохраненные на сервере, отправляются на устройство. Если все в порядке, последний обновленный номер записи для UDID устанавливается на последний отправленный номер записи.

Пользователь имеет возможность выбрать все записи и обновить свою базу данных, если он чувствует необходимость синхронизировать свое устройство со всей базой данных.

Кажется, работает хорошо.

-t

1 голос
/ 24 декабря 2009

Есть вопрос, на который вам нужно ответить в первую очередь; Как вы определяете набор измененных записей в базе данных MySQL?

Или, более конкретно, учитывая, что база данных MySQL находится в состоянии A, происходят некоторые транзакции и теперь она находится в состоянии B, как узнать, что изменилось между A и B?

Итог; вам нужна схема в MySQL, которая позволяет это. После того, как вы ответили на этот вопрос, вы можете ответить на вопрос «Как мне синхронизировать проблему?».

0 голосов
/ 24 декабря 2009

Вы можете найти много других похожих вопросов, выполнив поиск "синхронизация iphone":

https://stackoverflow.com/search?q=iphone+synchronization

Я собираюсь предположить, что данные идут только от mysql к sqlite, а не в обратном направлении.

Три - это несколько способов, которые я мог бы себе представить, делая это. Во-первых, просто перезагружать вся база данных при каждом обновлении. Другой способ, который я описываю ниже, - это создать таблицу «log» для записи изменений в вашей основной таблице, а затем загружать только новые журналы при выполнении обновления.

Я бы создал новую таблицу "log" в вашей базе данных SQL для регистрации изменений в таблице, нуждающейся в синхронизации. Журнал может содержать столбец «ревизия», чтобы отслеживать, в каком порядке были внесены изменения, столбец «тип», чтобы указать, была ли это вставка, обновление или удаление, идентификатор строки, если затронутая строка, и, наконец, иметь весь набор столбцов из вашей основной таблицы.

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

Имея только 10 тыс. Записей, я бы не ожидал, что эта таблица журналов будет настолько огромной.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...