Attualmente sto lavorando a un'app mobile / desktop / distribuita con esattamente gli stessi requisiti e problemi.
Prima di tutto, questi requisiti non sono inerenti alle app mobili di per sé, ma a qualsiasi transazione client-server disconnessa / distribuita (programmazione parallela, multithreading, si ottiene il punto). In quanto tali, naturalmente, sono i problemi tipici da affrontare nelle app mobili.
Generalmente, ciò a cui tutto si riduce è che si dispone di un potenziale record di dati che viene distribuito a n client, che possono modificarlo allo stesso tempo. Quello di cui hai bisogno è
- un meccanismo di controllo / blocco della versione appropriato,
- una corretta gestione dei diritti / degli accessi,
- una corretta strategia di sincronizzazione / caching
Per (1) puoi applicare alcuni schemi: Esistono due strategie di blocco usate frequentemente: Blocco offline ottimizzato , e Blocco offline pessimistico . Alcuni di questi vengono applicati in diversi "modelli" di controllo di versione, come Controllo di concorrenza multiVersione (MVCC), che utilizza un contatore (una sorta di "time stamp" molto semplice) per ogni record di dati, che viene aggiornato ogni volta che viene modificato il record.
(2) e (3) sono argomenti molto generali, che devono essere trattati indipendentemente da (1). Alcuni consigli dalla mia esperienza:
-
Utilizza una tecnologia client-server che astrae la maggior parte dei problemi per te. Consiglio vivamente alcune tecnologie web come CouchDb , che gestisce (1) tramite Optimistic Offline Locking + MVCC, (2) tramite Web API, e (3) tramite il caching Http molto bene.
-
Cerca di non inventare le cose da solo se puoi contare su tecnologie e approcci collaudati. Credo che ogni ora trascorsa a ricercare e confrontare tecnologie / modelli esistenti sia molto meglio spesa che tentare di implementare il / i proprio / i sistema / i.
-
Cerca di utilizzare tecnologie omogenee se possibile. Per "omogeneo" intendo tecnologie che sono state costruite con gli stessi principi in mente, ad es. scenari di utilizzo del web 2.0. Un esempio: l'utilizzo di un client CouchDb e REST (Web API) appropriato con una strategia di memorizzazione nella cache locale è una scelta migliore rispetto all'utilizzo di SQL per le app mobili.
-
Consiglio vivamente contro l'uso di MySQL perché è una tecnologia che non è stata esplicitamente creata per tali scenari di utilizzo. Funziona, ma stai molto meglio con un sistema di database che abbraccia già la comunicazione web e lo stile di concorrenza (come molti database NoSQL).
A proposito, ho optato per CouchDb con un client locale personalizzato che lavora contro le API CouchDb, che funziona e scala magnificamente. Sono passato dall'utilizzo di MSQL + (N) Hibernate e ho pagato un prezzo elevato per non aver fatto la scelta giusta (il che significa non fare abbastanza ricerche) in primo luogo.