Najlepszy sposób synchronizacji lokalnego HTML5 DB (WebSQL Storage, SQLite) z serwerem (2 way sync) [zamknięty]

Rozwijam mobilną aplikację internetową (dla iPhone ' a i Androida) z lokalną bazą danych (przy użyciu html5 webstorage), więc moja aplikacja jest nadal używana, gdy użytkownik jest offline.

To działa idealnie, ale chcę zapisać dane lokalne na serwerze. Więc muszę zsynchronizować lokalny DB z DB na serwerze. Synchronizacja może być tylko w jedną stronę, ale w przyszłości chciałbym ją zsynchronizować w obie strony (serwer local DB).

To wymaganie wygląda bardzo często (lub będzie powszechne w przyszłości dla mobilnej aplikacji internetowej), ale nie mogę znaleźć biblioteki robiącej to.

Wiem, że google robi to w swojej mobilnej aplikacji internetowej (np. gmail), a ja znalazłem projekt WSPL projekt google, ale bez źródła do pobrania.

Jeśli nie mogę znaleźć rozwiązania, stworzę do tego bibliotekę, ponieważ synchronizacja w jeden sposób nie wygląda na trudną, ale zastanawiam się, czy są inne rozwiązania.

Author: Samuel, 2009-11-16

2 answers

  • stworzyłem małą bibliotekę JS o nazwie WebSqlSync , aby zsynchronizować lokalny WebSql DB z serwerem (klient serwer). Bardzo łatwy w użyciu i do integracji w kodzie:

Https://github.com/orbitaloop/WebSqlSync

  • projekt open source QuickConnect zawiera bibliotekę JS do synchronizacji lokalnego DB HTML5 SQLite do DB serwera (MySQL lub inne) :

Http://quickconnect.pbworks.com/Using-Enterprise-Synchronization

Aby użyć tej lib, musisz użyć obiektu DataAccessObject frameworka, aby uzyskać dostęp do bazy danych. Działa poprzez zapisanie wszystkich zapytań SQL zastosowanych do bazy danych (poza oczywiście select) i wysłanie ich na serwer. Świetnie jest zarządzać usuwaniem, ale jest to trochę ciężkie, jeśli masz dużo aktualizacji, a serwer musi używać tego samego języka SQL...

  • kolejny projekt z QuickConnect jest natywną synchronizacją SQLite (w Objective C dla iOS lub Mac OS oraz w Javie dla Androida):

Http://www.quickconnectfamily.org/qcdbsync / (Myślę, że przechowuje również historię wszystkich zapytań SQL)

  • i właśnie znalazłem kolejną obiecującą bibliotekę JS: persistenceJS

Https://github.com/zefhemel/persistencejs

"wytrwałość.js jest asynchronicznym maperem obiektowo-relacyjnym Javascript biblioteka. Możesz go używać zarówno w przeglądarce, jak i na serwerze (i możesz udostępniać modele danych między nimi)."

Mają moduł DB synch: DOC of persistence./ align = "left" / js

W przeciwieństwie do innych systemów, w których nie ma dostępu do Internetu, nie ma dostępu do Internetu.]}
  • i jest też Impel.inTouch . Wygląda na bardzo łatwy w użyciu( z plikami php dołączonymi), ale musisz użyć frameworka Mootools po stronie klienta :

Http://impel.simulacre.org/api/Impel.inTouch

    Sencha ma również usługę synchronizacji: Sencha.io . wygląda świetnie, ale zależy od struktury Sencha Touch:

Http://www.sencha.com/products/io/

 71
Author: Samuel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-02 16:06:26

Opracowałem ogólne rozwiązanie synchronizacji o nazwie WebSqlSync .

Nie jest zależna od żadnego frameworka. Jest on dostępny tutaj : https://github.com/orbitaloop/WebSqlSync

Wyciąg z pliku README:

WebSqlSync

Automatycznie synchronizuje lokalną bazę danych WebSql (SQLite w nawigatorze) z serwerem. (2 way sync: client server)

Bardzo łatwy do integracji z istniejącą aplikacją i bardzo łatwy w użyciu (2 funkcje do wywołania : initSync i syncNow)

Użycie

Initialize

Musisz zainicjować lib(na przykład przy każdym uruchomieniu).

Automatycznie utworzy 2 tabele (jeśli jeszcze nie istnieją, jedna do przechowywania wszystkich nowych lub zmodyfikowanych elementów (table new_elem) i jedna do przechowywania daty ostatniej synchronizacji (table sync_info). Utworzy również wyzwalacze SQLite w celu oglądania wstawiania lub aktualizacji tabel, które chcesz zsynchronizować (aby automatycznie wstawić zmodyfikowany elementy w tabeli new_elem):

DBSYNC.initSync(TABLES_TO_SYNC, webSqlDb, sync_info, 'http://www.myserver.com', callBackEndInit);

Gdzie TABLES_TO_SYNC jest listą tabeli, którą chcesz zsynchronizować z serwerem, np:

TABLES_TO_SYNC = [
    {tableName : 'table1', idName : 'the_id'},
    {tableName : 'table2'} //if idName not specified, it will assume that it's "id"
];

Synchronizuj

Aby rozpocząć synchronizację, musisz wywołać funkcję syncNow. Można wywołać go co X sekund, lub po pewnych zmianach, na przykład:

DBSYNC.syncNow(callBackSyncProgress, function(result) {
     if (result.syncOK === true) {
         //Synchronized successfully
     }
});
I to wszystko, co musisz zrobić na kliencie. Po stronie serwera będziesz musiał zakodować własne rozwiązanie (ale nie jest to skomplikowane). I jest jakiś przykład inPHP & Java. Ponownie, wkład jest mile widziany.
 18
Author: Samuel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-30 18:22:47