Синхронизация базы данных Android-приложений с удаленной базой данных

Я нахожусь на этапе планирования приложения для Android, которое синхронизируется с веб-приложением. Веб-сторона будет написана на Python, возможно, с Django или Pyramid, в то время как приложение для Android будет простой java. Моя цель состоит в том, чтобы приложение Android работало, пока нет подключения к данным, за исключением социальных / веб-аспектов приложения.

Это будет запущенное приложение, поэтому я хочу придерживаться того, что можно легко установить одним щелчком мыши на рынке и не требует отдельной загрузки, такой как CloudDB для Android.

Я не нашел базы данных, которые поддерживают эту функциональность, поэтому я сам ее напишу. Одно предостережение при написании логики синхронизации – это некоторые общие данные между пользователями, с которыми смогут писать несколько пользователей. Это сольный проект, поэтому я подумал, что проработал здесь, чтобы посмотреть, не полностью ли я нахожусь вне базы.

  • Приложение будет обрабатывать локальные сохранения в локальной базе данных sqlite, а затем отправлять сообщения службе, которая будет пытаться синхронизировать эти изменения с удаленной базой данных.
  • Служба синхронизации будет чередоваться между проверкой сообщений для локального приложения, то есть изменением общих данных другими пользователями и записью локальных изменений на удаленный сервер.
  • Все данные будут иметь временную метку для отслеживания изменений.
  • При записи из приложения на сервер, если у сервера есть более новая информация, пользователь будет предупрежден о конфликте и попросит перезаписать то, что сервер или отказаться от локальных изменений. Если сервер не обновлялся с момента последнего чтения приложения, обработайте его.
  • Когда данные поступают с сервера на приложение, если сервер имеет более новые данные, перезаписывать локальные данные, в противном случае отбрасывать их, поскольку они будут обрабатываться при следующем обновлении приложения, обновляющего сервер.

Вот несколько вопросов:

1) Это звучит как излишний? Есть ли более простой способ справиться с этим?

2) Где должна проходить эта обработка? На клиенте или на сервере? Я думаю, что преимущество клиента – это меньше обработки на сервере, но если он находится на сервере, это упрощает реализацию других клиентов.

3) Как я должен обрабатывать обновления с сервера? Инкрементальный опрос или комета / websocket? Единственное, о чем нужно помнить, это то, что я бы предпочел пойти с минимальной установкой в ​​Webfaction, чтобы начать, поскольку это запуск.

Как только эти проблемы решаются, я планирую внести свой вклад в сообщество geek.

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

2) Я думаю, что вы должны кэшировать изменения пользователя локально с локальной меткой времени до завершения синхронизации. Тогда сервер должен управлять всей обработкой: отслеживать текущую версию, совершать и откатывать попытки обновления. Меньшая обработка на клиенте = лучше для вас! (Легче поддерживать и внедрять)

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

PS: Похоже, это вопрос VEEERYY OLD … LOL