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

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

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

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

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

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

Ответы

Ответ 1

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

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

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

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

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

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

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

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

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

Ответ 2

Шаги:

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

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

Ответ 3

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

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

так...

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

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

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

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

Ответ 4

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