Лучший способ синхронизации локальной HTML5 DB (WebSQL Storage, SQLite) с сервером (2-х сторонняя синхронизация) [закрыто]



Я разрабатываю мобильное веб-приложение (для iPhone и Android) с локальной базой данных (используя html5 webstorage), поэтому мое приложение все еще можно использовать, когда пользователь находится в автономном режиме.



Это прекрасно работает, но я хочу сохранить данные на сервере. Поэтому мне нужно синхронизировать локальную БД с БД на сервере. Синхронизация может быть только одним способом, но в будущем я хотел бы синхронизировать его в обоих направлениях (server local DB).



этот requierement выглядит очень распространенный (или будет распространен в будущем для мобильных веб-приложений), но я не могу найти библиотеку, делающую это.



Я знаю, что google делает это в своем мобильном веб-приложении (ex. gmail), и я нашел проект WSPL проект Google, но без источника для загрузки.



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

787   2  

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. выглядит отлично, но это зависит от прикосновения Сенча рамки:

http://www.sencha.com/products/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

    Ничего не найдено.