Лучший способ синхронизации локальной HTML5 DB (WebSQL Storage, SQLite) с сервером (2-х сторонняя синхронизация) [закрыто]
Я разрабатываю мобильное веб-приложение (для iPhone и Android) с локальной базой данных (используя html5 webstorage), поэтому мое приложение все еще можно использовать, когда пользователь находится в автономном режиме.
Это прекрасно работает, но я хочу сохранить данные на сервере. Поэтому мне нужно синхронизировать локальную БД с БД на сервере. Синхронизация может быть только одним способом, но в будущем я хотел бы синхронизировать его в обоих направлениях (server local DB).
этот requierement выглядит очень распространенный (или будет распространен в будущем для мобильных веб-приложений), но я не могу найти библиотеку, делающую это.
Я знаю, что google делает это в своем мобильном веб-приложении (ex. gmail), и я нашел проект WSPL проект Google, но без источника для загрузки.
Если я не могу найти решение, я создам библиотеку, чтобы сделать это, так как один из способов синхронизации не выглядит сложным, но мне интересно, есть ли другие решения.
2 ответов:
- Я создал небольшую JS lib с именем WebSqlSync для синхронизации локальной базы данных WebSql с сервером (клиент сервер). Очень проста в использовании и интеграции в ваш код:
https://github.com/orbitaloop/WebSqlSync
- проект с открытым исходным кодом QuickConnect содержит библиотеку JS для синхронизации локальной базы данных HTML5 SQLite с серверной базой данных (MySQL или другой) :
http://quickconnect.pbworks.com/Using-Enterprise-Synchronization
чтобы использовать эту lib, вам нужно использовать DataAccessObject платформы для доступа к вашей БД. Он работает, сохраняя все SQL-запросы, применяемые к БД (за исключением select , конечно), и отправляя их на сервер. Это здорово управлять удалением, но это немного тяжело, если у вас много обновлений, и сервер должен использовать тот же SQL язык...
- новая QuickConnect является родным SQLite synch (в Objective C для iOS или Mac OS и в Java для Android):
http://www.quickconnectfamily.org/qcdbsync/ (Я думаю, что он хранит также историю всех запросов SQL)
- и я только что нашел еще одну многообещающую библиотеку JS : persistenceJS
https://github.com/zefhemel/persistencejs
"настойчивость.JS является асинхронным объектно-реляционный маппер библиотеки JavaScript. Вы можете использовать его в браузере, а на сервере (и вы можете поделиться моделями данных между ними)."
у них есть модуль синхронизации DB:док настойчивости.синхронизировать.js
(работает с HTML5 DB SQLite или Google Gears на клиенте, и MySQL на сервере)
- а также Impel.inTouch. Он выглядит очень простым в использовании (с включенными файлами php), но вы должны использовать фреймворк Mootools на стороне клиента:
http://impel.simulacre.org/api/Impel.inTouch
- Sencha также имеет службу синхронизации:Sencha.io. выглядит отлично, но это зависит от прикосновения Сенча рамки:
Я разработал общее решение синхронизации под названием WebSqlSync.
Это не зависит от каких-то рамок. Он доступен здесь : https://github.com/orbitaloop/WebSqlSync
извлечение файла README:
WebSqlSync
автоматическая синхронизация локальной базы данных WebSql (SQLite в навигаторе) с сервером. (2 способ синхронизации : клиент сервер)
очень легко интегрировать в существующее приложение и очень проста в использовании (2 функции для вызова : initSync и syncNow)
использование
инициализации
вам нужно инициализировать lib (например, при каждом запуске).
он автоматически создаст 2 таблицы (если они еще не существуют, один для хранения всех новых или измененных элементов (таблица new_elem) и один для хранения даты последней синхронизации (таблица sync_info). Это также позволит создать базу данных SQLite триггеры для того, чтобы смотреть на вставку или обновление ПО таблицы, которые вы хотите синхронизировать (чтобы автоматически вставлять измененные элементы в таблицу new_elem):
DBSYNC.initSync(TABLES_TO_SYNC, webSqlDb, sync_info, 'http://www.myserver.com', callBackEndInit);где TABLES_TO_SYNC-это список таблиц, которые вы хотите синхронизировать с сервером, например:
TABLES_TO_SYNC = [ {tableName : 'table1', idName : 'the_id'}, {tableName : 'table2'} //if idName not specified, it will assume that it's "id" ];синхронизация
для запуска синхронизации необходимо вызвать функцию syncNow. Вы можете вызывать его каждые X секунд или после некоторых изменений, например:
DBSYNC.syncNow(callBackSyncProgress, function(result) { if (result.syncOK === true) { //Synchronized successfully } });и это все, что вам нужно сделать на клиенте. На сервере кроме того, вам нужно будет закодировать свое собственное решение (но это не сложно). И есть некоторые примеры inPHP & Java. И вновь приветствуются взносы.
Comments