Obecnie pracuję nad aplikacją mobilną / stacjonarną / rozproszoną z dokładnie tymi samymi wymaganiami i problemami.
Po pierwsze, wymagania te nie są nieodłącznie związane z aplikacjami mobilnymi per se, ale z wszelkimi rozłączonymi / rozproszonymi transakcjami klient-serwer (programowanie równoległe, wielowątkowość, masz rację). Jako takie są oczywiście typowymi problemami do rozwiązania w aplikacjach mobilnych.
Ogólnie rzecz biorąc, sprowadza się to do tego, że masz potencjalny rekord danych, który jest dystrybuowany do n klientów, którzy mogą go edytować w tym samym czasie. Potrzebujesz tego
- odpowiedni mechanizm kontroli / blokowania wersji,
- właściwe zarządzanie prawami / dostępem,
- odpowiednia strategia synchronizacji / buforowania
Dla (1) możesz zastosować pewne wzorce: Istnieją dwie często stosowane strategie blokowania: optymistyczne blokowanie offline i pesymistyczne blokowanie offline . Niektóre z nich są stosowane w różnych „wzorach” kontroli wersji, takich jak MultiVersion Concurrency Control (MVCC), która wykorzystuje licznik (rodzaj bardzo prostego „znacznika czasu”) dla każdego rekordu danych, który jest aktualizowany po każdej zmianie rekordu .
(2) i (3) same w sobie są bardzo szerokimi zagadnieniami, którymi należy się zająć niezależnie od (1). Kilka rad z mojego doświadczenia:
Skorzystaj z technologii klient-serwer, która pozbywa się większości problemów. Bardzo polecam niektóre technologie sieciowe, takie jak CouchDb , który obsługuje (1) przez Optymistyczne Blokowanie Offline + MVCC, (2) przez Web API i (3) bardzo dobrze buforuje HTTP.
Staraj się nie wymyślać rzeczy samodzielnie, jeśli możesz polegać na sprawdzonych technologiach i podejściach. Uważam, że każda godzina spędzona na badaniu i porównywaniu istniejących technologii / wzorców jest znacznie lepsza niż próba wdrożenia własnego systemu (systemów).
W miarę możliwości staraj się stosować homogeniczne technologie. Przez „jednorodny” rozumiem technologie, które zostały zbudowane z myślą o tych samych zasadach, np. Scenariusze użycia Web 2.0. Przykład: użycie odpowiedniego CouchDb i klienta REST (Web API) z lokalną strategią buforowania jest lepszym wyborem niż użycie SQL dla aplikacji mobilnych.
Zdecydowanie odradzam korzystanie z MySQL, ponieważ jest to technologia, która nie została specjalnie stworzona dla takich scenariuszy użycia. Działa, ale znacznie lepiej jest z systemem baz danych, który już obejmuje styl komunikacji internetowej i styl współbieżności (taki jak wiele baz danych NoSQL).
Nawiasem mówiąc, zdecydowałem się na CouchDb z niestandardowym lokalnym klientem działającym przeciwko interfejsom API CouchDb, który działa i skaluje się pięknie. Zrezygnowałem z używania MSQL + (N) Hibernacja i zapłaciłem wysoką cenę za to, że nie dokonałem właściwego wyboru (co oznacza, że nie przeprowadziłem wystarczającej liczby badań).