Как синхронизировать автономную веб-базу данных HTML5 с централизованной базой данных

Я хотел бы иметь возможность сделать следующее в веб-приложении HTML5 (iPad):

  • загружать данные в онлайн-базу данных (размер которой, вероятно, был бы ‹50 МБ, если бы я собирал онлайн-базу данных на чем-то вроде SQLite)
  • извлечь подмножество или полную копию данных в автономную веб-базу данных
  • (путешествие за пределы зоны покрытия сети 3G)
  • выполнить кучу расчетов аналитического типа на загруженных данных
  • сохранить параметры для моих расчетов в автономной веб-базе данных
  • повторите, сохраняя различные наборы параметров для нескольких различных сеансов расчетов автономного аналитического типа в течение длительного периода времени.
  • (вернитесь в районы с покрытием сети 3G)
  • синхронизировать сохраненные параметры из моей автономной веб-базы данных с центральной онлайн-базой данных

Меня устраивает каждый шаг до последнего...

Я пытаюсь найти информацию о том, можно ли синхронизировать автономную веб-базу данных с центральной базой данных, но не могу найти ничего по этой теме. Можно ли сделать это? Если да, не могли бы вы предоставить ссылки на информацию об этом ИЛИ описать, как это будет работать, достаточно подробно, чтобы реализовать его для моего конкретного приложения?

заранее спасибо


person monch1962    schedule 20.12.2010    source источник


Ответы (4)


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

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

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

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

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

Если UUID не существует на центральном сервере, но существует на автономном клиенте, я вставляю его, и наоборот.

Чтобы очистить записи, я создаю столбец «очистка», и при выполнении запроса sysnc я удаляю запись из каждой базы данных (или помечаю ее как неактивную, в зависимости от требований приложения).

Если обе записи изменились с момента последнего обновления, я должен либо полагаться на пользовательский ввод для согласования, либо на правило, указывающее, какая запись «выигрывает».

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

person CurtisMO    schedule 11.04.2011

Шаги:

  1. Храните список изменений в локальной базе данных.
  2. При подключении к удаленной базе данных проверьте наличие изменений с момента последней синхронизации на удаленном компьютере.
  3. Если изменения на удаленной стороне конфликтуют с локальными изменениями, сообщите пользователю, что делать.
  4. For all other changes, proceed with sync:
    1. download all online changes which did not change locally.
    2. загрузить все локальные изменения, которые не изменились удаленно.

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

person syockit    schedule 12.03.2011

Мне кажется, что на нескольких сайтах, которые я посетил, (пока вы используете SQLite для своего сервера db) это должно быть возможно.

Веб-базы данных HTML5 также используют SQLite (хотя не все браузеры поддерживают его, и W3C, похоже, прекратил его поддержку)

so...

Если вы экспортируете данные с помощью команды .dump, а затем импортируете данные в веб-базу данных, используя синтаксис $sqlite mydb.db ‹ mydump.sql, вы должны быть в состоянии сделать это, немного повозившись с бэкэндом php или java?

Затем, когда вы хотите синхронизировать «автономные» данные с вашим сервером, просто сделайте противоположный дамп из базы веб-данных в файл dump.sql и импортируйте в базу данных сервера.

Этот сайт объясняет экспорт и импорт из дампов SQLite.

ИСТОЧНИК: сброс и восстановление базы данных SQLite

person ScottC    schedule 28.01.2011
comment
если вы попробуете это, и оно сработает, или если вы нашли другое решение, пожалуйста, дайте мне знать, я только что узнал об этой функции веб-базы данных HTML5 из ​​вашего сообщения, и я очень заинтересован в том, чтобы когда-нибудь попробовать ее в моем собственном проекте. - person ScottC; 28.01.2011

HTML5 поддерживает базу данных браузера SQLite, я пробовал в Mozilla и Chrome, и он отлично работает. У меня также есть требование, когда у меня есть некоторая автономная форма, пользователь пробивает данные и нажимает «Сохранить», они сохраняются в локальной базе данных браузера, а позже, когда пользователь синхронизируется с сервером или подключается к сети, он может нажать кнопку синхронизации, которая фактически синхронизирует данные из базы данных браузера любого другого источника данных.

person Ankur Singhal    schedule 11.04.2014