Лучший способ синхронизации локальной HTML5 DB (WebSQL Storage, SQLite) с сервером (2-х сторонняя синхронизация) [закрыто]
Я разрабатываю мобильное веб-приложение (для iPhone и Android) с локальной базой данных (используя html5 webstorage), поэтому мое приложение все еще можно использовать, когда пользователь находится в автономном режиме.
Это прекрасно работает, но я хочу сохранить данные на сервере. Поэтому мне нужно синхронизировать локальную БД с БД на сервере. Синхронизация может быть только одним способом, но в будущем я хотел бы синхронизировать ее в обоих направлениях (сервер локальная БД).
этот requierement выглядит очень распространенный (или будет распространен в будущем для мобильных веб-приложений), но я не могу найти библиотеку, делающую это.
Я знаю, что google делает это в своем мобильном веб-приложении (ex. gmail), и я нашел проект WSPL проект Google, но без источника для загрузки.
Если я не могу найти решение, я создам библиотеку для этого, так как один из способов синхронизации не выглядит сложным, но мне интересно, есть ли другие решения.
2 ответов
- Я создал небольшой JS lib с именем WebSqlSync для синхронизации локальной БД WebSql с сервером (client server). Очень прост в использовании и интеграции в ваш код :
https://github.com/orbitaloop/WebSqlSync
- проект с открытым исходным кодом QuickConnect содержит библиотеку JS для синхронизации локальной БД HTML5 SQLite с БД сервера (MySQL или другой) :
http://quickconnect.pbworks.com/Using-Enterprise-Synchronization
чтобы использовать этот lib, вам нужно использовать DataAccessObject платформы для доступа к вашей БД. Он работает, сохраняя все SQL-запросы, применяемые к БД (кроме select of course) , и отправляя их на сервер. Это здорово управлять удалением, но это немного тяжело, если у вас много обновлений, и сервер должен использовать тот же SQL язык...
- новая QuickConnect является родной синхронизацией SQLite (в 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 на сервере)
- а также Импел.inTouch. Он выглядит очень простым в использовании (с включенными файлами php), но вы должны использовать платформу Mootools на стороне клиента :
http://impel.simulacre.org/api/Impel.inTouch
- Sencha также имеет службу синхронизации:Сенча.Ио. Выглядит отлично, но это зависит от прикосновения Sencha рамки:
Я разработал общее решение синхронизации под названием 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. И вновь приветствуются взносы.