Jest to bardziej pytanie koncepcyjne, niekoniecznie związane z konkretnymi technologiami. Powiedzmy, że masz trochę bazy danych na serwerze, niektóre REST/JSON API, aby uzyskać dostęp do zawartości w tej bazie danych i niektórych klientów mobilnych wyświetlających dane pobrane przez API.Synchronizacja modelu częściowej bazy danych z serwera na klienta
Byłoby miło mieć mechanizm buforowania na kliencie, a także mieć możliwość włączania dostępu do danych w trybie offline, o ile tylko klient czyta (w moim przypadku można odmówić prawa zapisu dla klientów offline uniknąć konieczności radzenia sobie z tymi wszystkimi okropnymi konfliktami, które mogą się wydarzyć).
Wydaje się, że dobrym sposobem na rozwiązanie byłoby posiadanie podzbioru modelu bazy danych serwerów na kliencie i synchronizacji danych z serwera do klienta. Dostęp do lokalnej bazy danych może wtedy natychmiastowo zwrócić wyniki, ale także wyzwalać żądania aktualizacji na serwerze. W przypadku gdy serwer zwróci zmodyfikowane dane, model klienta synchronizuje lokalną bazę danych i powiadamia o wyświetleniu zmian danych.
Celem na koniec jest oczywiście to, że użytkownik może przeglądać informacje niezależnie od stabilności swojego połączenia internetowego i nie jest denerwowany przez okna dialogowe połączeń lub podobne, o ile nie zmienia żadnych danych.
Teraz z perspektywy wdrożenia ... z jednej strony wydaje się złym pomysłem powiązanie bazy danych serwera bezpośrednio z bazą danych klienta, ponieważ mogą pochodzić od różnych dostawców. Sądzę, że przynajmniej nad modelem obu baz danych musiałby istnieć model niezależny od dostawcy. Z drugiej strony, przekształcenie danych z bazy danych serwera w pewien format transportu i umieszczenie go z powrotem w bazie danych klienta wydaje się dużo narzutem.
Jakieś sugestie, jak rozwiązać ten problem w elegancki i trwały sposób?
Zdecydowanie sugeruję jedną z dwóch opisanych powyżej opcji Johna. GCM jest preferowany ze względu na sposób, w jaki jest wbudowany w system Android. Jeśli jednak Twój projekt nie spełnia wymagań GCM, pierwsze opcje pozostaną. –
Nie podoba mi się pierwsza opcja, ponieważ może to spowodować aktualizację danych, których użytkownik nigdy nie obejrzy. GCM i planuję dołączyć do lekkich powiadomień, ale wyzwalanie aktualizacji baz danych może być zbyt nieefektywne w moim przypadku. Nie jestem też pewna, jak dobrze by działała na platformach telefonów komórkowych, ponieważ te usługi push wydają się być specyficzne dla danego dostawcy. Co sądzisz o tej trzeciej opcji? Zaktualizuj lokalną bazę danych na podstawie użycia. Gdy dane są dostępne lokalnie, wynik lokalny może zostać natychmiast zwrócony, ale również żądanie wysłane do serwera jest wysyłane dla tych samych danych – mibollma