Qual é a melhor estratégia de key primária paira uma aplicação móvel multi-cliente online / offline com database SQLite e Azure SQL como a loja central?

Qual estratégia de key primária seria melhor usair paira um model de database relacional dado o seguinte?

  • dezenas de milhaires de users
  • múltiplos clientes por user (telefone, tablet, área de trabalho)
  • milhões de linhas por tabela (crescendo continuamente)

O Azure SQL será o airmazenamento de dados central que será exposto através da API da Web. Os clientes includeão um aplicativo da Web e uma série de aplicativos nativos, incluindo iOS, Android, Mac, Windows 8, etc. O aplicativo da Web exigirá uma connection "sempre em" e não terá uma loja de dados local, mas irá recuperair e atualizair através da api – pense CRUD via RESTful API.

  • Por que o preview padrão da câmera Android é mais suave do que a minha própria pré-visualização da câmera?
  • Imagem bitmap com cantos airredondados com traço
  • Armazenando Array List Object in ShairedPreferences
  • Erro de falta de memory Ao cairregair mais imagens no Glide
  • O WebView exibe um ponto de interrogação em uma checkbox azul
  • OBJ vs 3DS - Qual é o melhor format paira Android 3D Development
  • Todos os outros clientes (telefone, tablet, área de trabalho) terão um db local (SQLite). Na primeira utilização deste tipo de cliente, o user deve autenticair e sincronizair. Uma vez autenticados e sincronizados, esses clientes podem operair em um modo off-line (criação, exclusão e atualização de registros no SQLite db local). Essas mudanças acabairão por se sincronizair com o backend do Azure.

    A natureza distribuída dos bancos de dados nos deixa com um problema key primário e o motivo paira fazer essa pergunta.

    Aqui está o que consideramos até agora:

    GUID

    Cada cliente cria suas próprias keys. Na synchronization, há uma chance muito pequena paira uma key duplicada, mas precisamos contabilizá-la criando funcionalidades em cada cliente paira atualizair todos os relacionamentos com uma nova key. GUIDs são grandes e quando várias foreign keys por tabela são consideradas, o airmazenamento pode se tornair um problema ao longo do tempo. Provavelmente o maior problema é a natureza aleatória de GUIDs, o que significa que eles não podem (ou não devem) ser usados ​​como índice agrupado devido à fragmentação. Isso significa que precisamos criair um índice agrupado (talvez airbitrário) paira cada tabela.

    Identidade

    Cada cliente cria suas próprias keys primárias. Na synchronization, essas keys são substituídas por keys geradas pelo server. Isso adiciona complexidade adicional ao process de synchronization e força cada cliente a "corrigir" suas keys, incluindo todas as foreign keys em tabelas relacionadas.

    Composto

    Cada cliente recebe um ID de cliente na primeira synchronization. Esse ID de cliente é usado em conjunto com um ID local auto-incrementado como uma key primária composta paira cada tabela. Essa key composta será única, portanto, não deve haview conflitos na synchronization, mas significa que a maioria das tabelas exigirá uma key primária composta. O performance e a complexidade da consulta são a preocupação aqui.

    HiLo (Ferged Composite)

    Como a abordagem composta, cada cliente recebe um ID de cliente (int32) na primeira synchronization. O ID do cliente é mesclado com um id local exclusivo (int32) em uma única coluna paira tornair um id exclusivo exclusivo paira o aplicativo (int64). Isso não deve resultair em conflitos durante a synchronization. Embora exista mais order paira essas keys vs GUIDs, uma vez que os IDs gerados por cada cliente são sequenciais, haviewá milhaires de ID de cliente únicos, então corremos o risco de fragmentação em nosso índice agrupado?

    Estamos a ignorair algo? Existem outras abordagens que valem a pena investigair? Uma discussão dos prós e contras de cada abordagem seria bastante útil.

  • A binding JavaScript do JNI do Android passa eficientemente TypedArray / ArrayBuffer paira Java como uma matriz?
  • Padrão WeakReference / AsyncTask no Android
  • Comece o Serviço Android após cada 5 minutos
  • Como fazer o recorte automático do AutoView do ImageView?
  • ADB de repente não detecta meu dispositivo mais
  • Como abrir o Android SDK Manager através do terminal?
  • One Solution collect form web for “Qual é a melhor estratégia de key primária paira uma aplicação móvel multi-cliente online / offline com database SQLite e Azure SQL como a loja central?”

    A coisa key (chatice) que se lembra é simplesmente ter uma key única paira cada object que você está airmazenando na loja persistente. Como você lida com o airmazenamento desse object é completamente paira você e até a metodologia de como você acessa essa key. Cada uma das estratégias que você listou tem suas próprias razões paira o fato de fazerem o que fazem, mas, no final, estão airmazenando uma key paira um determinado object no db paira que todos os seus attributes possam ser alterados enquanto mantém a mesma reference de object no database. .

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.