Как синхронизировать автономную веб-базу данных 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 любого другого источника данных.