Je vais mettre en œuvre une application distribuée avec plusieurs clients mobiles et une application serveur basée sur le Web. Ainsi, chaque client et le serveur sont autorisés à générer des entrées de table. J'ai donc besoin de des clés primaires uniques pour tous les participants ET je veux être capable de générer des clés hors ligne .
Quelle est la meilleure approche pour générer des clés primaires que vous utilisez sur des environnements distribués ? Pour une question similaire, voir Quelle est la meilleure stratégie de clé primaire pour une application mobile multi-clients en ligne/hors ligne avec une base de données SQLite et Azure SQL comme magasin central ?
Je suis conscient que Génération de clés UUID est une bonne approche pour ce scénario, mais je veux m'en tenir à une clé avec le nom _id et le type long comme le suggère la plateforme Android.
Je ne veux pas avoir un identifiant composite avec l'identifiant du dispositif (le serveur est aussi un dispositif) et l'identifiant local. Cette approche ne fonctionnerait pas bien de toute façon puisque le serveur devrait être capable de générer des entrées pour un certain client. Dans ce cas, je devrais utiliser l'identifiant du dispositif également sur le serveur.
Par conséquent, ma préférence actuelle est de construire ma clé avec le type de données long (j'ai déjà fait cela dans un autre projet). Je pense que je vais utiliser le haut/bas (voir par exemple ici Quel est l'algorithme Hi/Lo ? ) et ont une clé qui se compose de :
- identifiant du client (par exemple, ~28 bits) généré par le serveur
- faible valeur (par exemple ~ 4 bits) incrémentée sur le client, jamais conservée.
- valeur élevée (par exemple ~ 32 bits) incrémentée sur le client, persistée sur le client seulement
L'identifiant du client doit être récupéré sur le serveur au premier démarrage de l'application mobile. Le premier démarrage nécessite donc une connexion réseau. Cela peut être un inconvénient de cette approche. En ayant l'identifiant du client sur l'appareil, je peux générer des clés sans connexion réseau.
Normalement, l'identifiant élevé est une valeur unique dans la base de données. Lorsqu'un utilisateur désinstalle l'application et la réinstalle, je dois le traiter comme un nouveau client et lui donner un nouvel identifiant. Sinon, je devrais sauvegarder l'identifiant élevé actuel sur le serveur pour pouvoir le restaurer en cas de perte ou de réinstallation - cela n'en vaut pas la peine.
Quelle est la meilleure approche pour obtenir le high id sur Android ? Une clé autoincrémentée n'est pas une solution. J'ai besoin de quelque chose comme une fonction de générateur. Et elle doit être exécutée dans sa propre transaction (pas dans la transaction "utilisateur"). Quelqu'un a-t-il une expérience de cette approche sur Android et peut-il m'indiquer la bonne direction ? (J'ai seulement trouvé ceci réponse ).
Quelle stratégie clé utilisez-vous pour votre application multi-clients (en ligne et hors ligne) ?