Tworzę mobilną aplikację internetową (na iPhone'a i Androida) z lokalną bazą danych (przy użyciu magazynu html5), aby moja aplikacja była nadal dostępna, gdy użytkownik jest offline.
To działa doskonale, ale chcę zapisać lokalne dane na serwerze. Muszę więc zsynchronizować lokalną bazę danych z bazą danych na serwerze. Synchronizacja może być tylko jednokierunkowa, ale w przyszłości chciałbym synchronizować ją w obie strony (serwer <-> lokalna baza danych).
To wymaganie wygląda bardzo często (lub będzie w przyszłości powszechne w przypadku aplikacji internetowych na urządzenia mobilne), ale nie mogę znaleźć biblioteki, która to robi.
Wiem, że Google robi to w swojej aplikacji mobilnej (np. Gmail) i znalazłem projekt WSPL jako projekt Google, ale bez źródła do pobrania.
Jeśli nie mogę znaleźć rozwiązania, utworzę bibliotekę, aby to zrobić, ponieważ synchronizacja w jedną stronę nie wygląda na trudną, ale zastanawiam się, czy są inne rozwiązania.
Odpowiedzi:
https://github.com/orbitaloop/WebSqlSync
http://quickconnect.pbworks.com/Using-Enterprise-Synchronization
Aby użyć tej biblioteki, musisz użyć DataAccessObject frameworku, aby uzyskać dostęp do swojej bazy danych. Działa poprzez przechowywanie wszystkich żądań SQL zastosowanych do bazy danych (z wyjątkiem oczywiście wyboru) i wysyłanie ich na serwer. Zarządzanie usuwaniem jest świetne, ale jest to trochę ciężkie, jeśli masz dużo aktualizacji, a serwer musi używać tego samego języka SQL ...
http://www.quickconnectfamily.org/qcdbsync/ (myślę, że przechowuje również historię wszystkich żądań SQL)
https://github.com/zefhemel/persistencejs
„persistence.js to asynchroniczna biblioteka obiektowo-relacyjna w języku JavaScript. Można jej używać w przeglądarce, a także na serwerze (i można między nimi udostępniać modele danych)”.
Mają moduł synchronizacji bazy danych: DOC of persistence.synch.js
(współpracuje z HTML5 DB SQLite lub Google Gears na kliencie i MySQL na serwerze)
http://impel.simulacre.org/api/Impel.inTouch
http://www.sencha.com/products/io/
źródło
Opracowałem ogólne rozwiązanie do synchronizacji o nazwie WebSqlSync .
Nie zależy od żadnego frameworka. Jest dostępny tutaj: https://github.com/orbitaloop/WebSqlSync
Wyciąg z pliku README:
WebSqlSync
Automatycznie synchronizuj lokalną bazę danych WebSql (SQLite w nawigatorze) z serwerem. (Synchronizacja dwukierunkowa: klient <-> serwer)
Bardzo łatwa integracja z istniejącą aplikacją i bardzo łatwa w użyciu (2 funkcje do wywołania: initSync i syncNow)
Stosowanie
Zainicjuj
Musisz zainicjować bibliotekę (na przykład przy każdym uruchomieniu).
Automatycznie utworzy 2 tabele (jeśli jeszcze nie istnieją, jedną do przechowywania wszystkich nowych lub zmodyfikowanych elementów (tabela new_elem) i jedną do przechowywania daty ostatniej synchronizacji (tabela sync_info). Utworzy również wyzwalacze SQLite w aby obserwować INSERT lub UPDATE na tabelach, które chcesz zsynchronizować (aby automatycznie wstawić zmodyfikowane elementy w tabeli new_elem):
Gdzie TABLES_TO_SYNC to lista tabel, które chcesz zsynchronizować z serwerem, np .:
Synchronizować
Aby rozpocząć synchronizację, musisz wywołać funkcję syncNow. Możesz to wywołać co X sekund lub po kilku zmianach, na przykład:
I to wszystko, co musisz zrobić na kliencie. Po stronie serwera będziesz musiał zakodować własne rozwiązanie (ale nie jest to skomplikowane). Jest też przykład w PHP i Javie. Ponownie mile widziane są składki.
źródło