Лучший способ синхронизации локальной 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 рамки:

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. И вновь приветствуются взносы.