Atualmente, estou trabalhando em um aplicativo móvel / desktop / distribuído com exatamente os mesmos requisitos e problemas.
Antes de tudo, esses requisitos não são inerentes aos aplicativos móveis em si, mas a qualquer transação cliente-servidor desconectada / distribuída (programação paralela, multithreading, você entende). Como tal, é claro que são problemas típicos a serem abordados em aplicativos móveis.
Geralmente, tudo se resume a isso: você tem um registro de dados em potencial que é distribuído para n clientes, que podem editá-lo ao mesmo tempo. O que você precisa é
- um mecanismo de controle / travamento de versão adequado,
- um gerenciamento adequado de direitos / acesso,
- uma estratégia de sincronização / armazenamento em cache adequada
Para (1) você pode aplicar alguns padrões: Existem duas estratégias de bloqueio usadas com freqüência: Bloqueio Offline Otimista e Bloqueio Offline Pessimista . Algumas delas são aplicadas em diferentes "padrões" de controle de versão, como o MVCC ( MultiVersion Concurrency Control ), que usa um contador (uma espécie de "registro de data e hora" muito simples)) para cada registro de dados, que é atualizado sempre que o registro é alterado .
(2) e (3) são questões muito amplas, que precisam ser tratadas independentemente de (1). Alguns conselhos da minha experiência:
Use uma tecnologia cliente-servidor que abstraia a maioria dos problemas para você. Eu recomendo algumas tecnologias da Web, como o CouchDb , que lida com (1) via Optimistic Offline Locking + MVCC, (2) via Web API e (3) via cache Http muito bem.
Tente não inventar as coisas você mesmo se puder confiar em tecnologias e abordagens comprovadas. Acredito que qualquer hora gasta pesquisando e comparando tecnologias / padrões existentes é muito melhor do que tentando implementar seu próprio sistema (s).
Tente usar tecnologias homogêneas, se possível. Por "homogêneo", refiro-me às tecnologias que foram construídas com os mesmos princípios em mente, por exemplo, cenários de uso da Web 2.0. Um exemplo: usar um CouchDb e um cliente REST (API da Web) adequados com uma estratégia de cache local é uma escolha melhor do que usar o SQL para aplicativos móveis.
Eu desaconselho fortemente o uso do MySQL, porque é uma tecnologia que não foi explicitamente feita para esses cenários de uso. Funciona, mas você está muito melhor com um sistema de banco de dados que já adota o estilo de comunicação e concorrência na Web (como muitos bancos de dados NoSQL).
A propósito, escolhi o CouchDb com um cliente local personalizado que trabalha com as APIs do CouchDb, que funcionam e se adaptam perfeitamente. Eu mudei de usar o MSQL + (N) Hibernate e paguei um preço alto por não fazer a escolha certa (ou seja, não fazer pesquisas suficientes) em primeiro lugar.