J'ai une application sur laquelle j'ai un ensemble de données qui, sans être techniquement statiques, ne changera pas très souvent (disons 3 ou 4 fois par an en moyenne). Cependant, certaines de ces données sont interdépendantes. Un exemple de ce type de données serait les états et les comtés - idéalement, nous aimerions connaître tous les états disponibles lors de la mise en place d'une adresse ou d'un lieu, mais nous aimerions également connaître les comtés disponibles pour chaque état. , donc nous pouvons afficher cette information de manière appropriée à l'utilisateur (c'est-à-dire filtrer les comtés inappropriés lorsqu'un utilisateur a un état sélectionné). Par le passé, je l'ai fait dans une base de données relationnelle en ayant une table d'état et de comté, où le comté est lié à l'état auquel il appartient, et l'état et les comtés sont liés à toutes les tables qui ont besoin de leur information. Cependant, ces données ne sont pas la propriété et, dans le magasin de données Google, il semble que le mécanisme de transaction de verrouillage provoque des verrous même si nous ne modifions pas activement ces données. Quelle est la meilleure façon de gérer ce type de données? Est-ce d'avoir une entité pour les pièces qui n'a pas de parent (parent de None/null)? Cela va-t-il causer des problèmes de verrouillage dans le futur?Comment gérer les "données de référence" (données statiques) dans le magasin de données Google App Engine?
Répondre
Je considérerais stocker ceci dans une structure de données optimisée dans votre code et la mettre à jour manuellement. Le gain de performance sera énorme, et puisque Google vous facture pour cela, vous finirez par le remercier. L'idée est de mélanger ces structures de données fixes avec votre base de données, de sorte que vous donniez un ID à chaque pays (ou quelque chose d'autre) et que vous le référenciez dans vos modèles.
Une approche simple est de dresser une liste de pays et chacun d'eux contient une liste d'états. Vous pouvez les charger dans def main():, avant d'exécuter l'application. Bien sûr, cela apportera toutes sortes de problèmes si vous ne faites pas attention, mais si vous le faites, vous devriez aller bien. Un plus avancé serait de garder en mémoire seulement les pays de charge et de décharge les plus utilisés et les plus paresseux à la volée.
"Bien sûr, cela apportera toutes sortes de problèmes si vous ne faites pas attention" - quels problèmes? Je suis vraiment nouveau à Python ET GAE, donc je ne vois pas le problème exact là. Merci pour la réponse aussi - vraiment utile. :) Qu'en est-il de la définition des structures de données dans un script .py de type constantes? Cela fonctionnerait-il de la même façon que la méthode principale que vous avez mentionnée plus haut? – aperkins
sûr, il suffit de lancer avant de lancer l'application, et def main(): est un super endroit. – fceruti
Un problème que je vois pourrait éventuellement se produire est l'attribution et l'identification à un pays, puis vient un nouveau développeur, le modifie, et votre base de données de trou n'a plus de sens. Thas pourquoi je dis que vous devriez faire attention, comme si vous étiez un moteur MySql! – fceruti
- 1. Requêtes paramétrées dans le magasin de données Google App Engine?
- 2. Conserver les données dans le magasin de données google app engine
- 3. Intégration à distance du magasin de données Google App Engine
- 4. Emplacement du magasin de données avec Google App Engine/Java
- 5. Google App Engine remplissant des entrées de magasin de données
- 6. Ancêtres dans le magasin de données App Engine
- 7. Accès au magasin de données App Engine
- 8. Stockage des données hiérarchiques dans le magasin de données Google App Engine?
- 9. Confidentialité des données dans le magasin de données Google App Engine
- 10. Meilleure option pour le magasin de données Google App Engine et la base de données externe?
- 11. Banque de données dans Google App Engine
- 12. Modélisation des données avec le magasin de données Google App Engine
- 13. Comment modifier les options de magasin de données dans Google App Engine?
- 14. Méthode get_by_id sur les classes Model dans le magasin de données Google App Engine
- 15. Comment le magasin de données Google App Engine évolue-t-il avec les sondages
- 16. Blocage de l'accès simultané au magasin de données App Engine
- 17. Comment stocker des expressions régulières dans le magasin de données Google App Engine?
- 18. Comment modéliser mon application dans le magasin de données Google App Engine
- 19. Comment filtrer par date/heure dans le magasin de données Google App Engine en utilisant GoLang
- 20. clé étrangère dans le magasin de données de google app
- 21. Écrire le flux HTTPServletRequest dans le magasin de données de Google App Engine
- 22. Comment stockez-vous un caractère non-ASCII dans le magasin de données Google App Engine
- 23. Comment stocker un tableau multidimensionnel dans le magasin de données Google App Engine
- 24. Insertion de données dans le magasin de données - App Engine - Un à plusieurs
- 25. Clé de clés parent dans le magasin de données Google App Engine
- 26. Mettre à jour le magasin de données dans Google App Engine à partir de l'iPhone
- 27. Filtrage par date dans le magasin de données de Google App Engine
- 28. Texte Google App Engine (Java) dans le magasin de données/fichier texte dynamique
- 29. Comment ajouter plus de 500 entrées au magasin de données avec put() dans google app engine?
- 30. Téléchargement de la base de données Google App Engine
Pourquoi pensez-vous que le mécanisme de transaction provoquera des verrous? Les transactions s'appliquent uniquement aux groupes d'entités. Quelle entité comptez-vous faire contre les écritures? –
@ DaveW.Smith Je parle des entités que je charge - dans cet exemple, les états et les comtés en particulier. Je ne prévois pas de leur écrire, mais je pensais lire cette lecture lors d'une transaction qui bloquerait plusieurs groupes d'entités si des multiples étaient lus - je pourrais très bien me tromper là-dessus. – aperkins
Je pense que vous vous trompez là-dessus. –