2010-06-23 2 views
4

У меня есть веб-приложение, которое основано на базе данных MySQL, для которой я собираюсь создать приложение для iPhone. Это приложение позволит пользователям просматривать/вставлять/обновлять/удалять данные в своей учетной записи в веб-приложении.Двусторонняя синхронизация между приложением iPhone и веб-приложением

Самый простой способ - создать приложение для iPhone просто как интерфейс для веб-приложения, то есть каждая операция требует подключения к сети. Тем не менее, я хотел бы, чтобы приложение iPhone имело собственную «автономную» версию базы данных. Это не только позволит пользователю работать в автономном режиме, но также даст лучший опыт, так как наличие всего локального означает более быстрое и отзывчивое приложение.

Я бы справился с конфликтами, используя временную метку и сохраняя последнюю версию (я уже использую soft-delete, т. Е. Когда пользователь удаляет запись, я просто устанавливаю флаг), но я не совсем понял, как обрабатывать вставки , Действительно, если пользователь вставляет новые элементы в автономные (iPhone приложения) и в онлайн (веб-приложения) базы данных, будет конфликт первичного ключа (все мои таблицы имеют поле INTEGER с автоматическим приращением в качестве первичного ключа). Как я могу справиться с этой проблемой?

Я думал о наличии первичного ключа с двумя номерами, один из которых является автоматически увеличивающимся целым числом, а второй - конкретным для «устройства». Таким образом, новые записи, добавленные через веб-приложение, будут иметь ID 1-web, 2-web и т. Д. И те, которые созданы через iPhone-приложение 1-iphone, 2-iphone и т. Д. Это позволит объединить два баз данных без конфликтов. Что вы думаете об этой идее?

ответ

5

Простейшим решением является использование UUID.

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

+0

Не могли бы вы рассказать о UUID? Это означает использование уникального ключа, сгенерированного из самой записи, а не базового автоматически увеличивающегося целого числа? Идея разделения пространства клавиш может также работать. Благодаря ! – Wookai

+0

UUID - это всего лишь полуслучайное 128-битное число, которое может быть сгенерировано из любого источника. Алгоритмы, используемые для создания UUID, предназначены для предотвращения коллизий, даже когда несколько источников генерируют их одновременно и независимо друг от друга. В MySQL для этой цели можно использовать функцию UUID(), но вы также можете генерировать их на iPhone самостоятельно, используя [CFUUIDCreate] (http://developer.apple.com/iphone/library/documentation/CoreFoundation/Reference /CFUUIDRef/Reference/reference.html#//apple_ref/c/func/CFUUIDCreate). –

+0

Отлично, спасибо большое за вашу помощь, это именно то, что я искал! – Wookai

Смежные вопросы