Quelqu'un peut-il illustrer comment je peux stocker et interroger facilement des données hiérarchiques dans le magasin de données google app engine?Stockage des données hiérarchiques dans le magasin de données Google App Engine?
Répondre
La meilleure option dépend de vos besoins. Voici quelques solutions (je suppose que vous utilisez Python, puisque vous n'avez pas spécifié):
- Si vous devez faire des mises à jour transactionnelles sur un arbre entier, et tu ne vas pas avoir plus Au sujet de 1QPS de mises à jour soutenues à un arbre, vous pouvez utiliser le support intégré pour le stockage heirarchial. Lors de la création d'une entité, vous pouvez passer l'attribut "parent" pour spécifier une entité ou clé parent, et lors de l'interrogation, vous pouvez utiliser la méthode .ancestor() (ou 'ANCESTOR IS' dans GQL pour récupérer tous les descendants d'une entité donnée
- Si vous n'avez pas besoin de mises à jour transactionnelles, vous pouvez répliquer la fonctionnalité des groupes d'entités sans les problèmes de contention (et la sécurité des transactions): Ajoutez un db.ListProperty (db.Key) à votre modèle appelé 'ancestors'; remplissez-le avec la liste des ancêtres de l'objet que vous insérez.Puis vous pouvez facilement récupérer tout ce qui descend d'un ancêtre donné avec MyModel.all(). filter ('ancestors =', parent_key)
- Si vous ne le faites pas Vous n'avez pas besoin de transactions, et vous ne vous souciez que de récupérer les enfants directs d'une entité (pas tous les descendants), utilisez l'approche décrite ci-dessus, mais à la place d'un ju de ListProperty st utilise ReferenceProperty pour l'entité parente. Ceci est connu comme une liste d'adjacence.
Il existe d'autres approches disponibles, mais ces trois devraient couvrir les cas les plus courants.
Eh bien, vous devriez essayer de garder vos données aussi linéaire que possible. Si vous avez besoin d'interroger rapidement une structure arborescente de données, vous devrez soit la stocker dans la base de données (ou codée en JSON si vous préférez) si cela est possible pour vos données, ou vous devrez générer des index d'arbre qui peuvent être utilisé pour interroger rapidement un morceau d'une structure d'arbre. Toutefois, je ne suis pas certain de la performance de Google App Engine lors de la mise à jour de ces index. En ce qui concerne Google App Engine, votre principale préoccupation devrait être de réduire le nombre de requêtes que vous devez effectuer et que vos requêtes retournent le moins de lignes possible. Les opérations sont coûteuses, mais le stockage ne l'est pas, donc la redondance ne devrait pas être considérée comme une mauvaise chose.
Voici quelques réflexions sur le sujet que je trouve par googler (bien que pour MySQL, mais vous pouvez obtenir l'idée générale de celui-ci): Managing Hierarchical Data in MySQL
Ah et est ici une discussion pour Google App Engine: Modeling Hierarchical Data
Une façon consiste à utiliser l'attribut parent du modèle. Vous pouvez ensuite utiliser les fonctions query.ancestor() et model.parent().
Je suppose que cela dépend du type d'opérations que vous voulez effectuer sur ces données, ce qui déterminerait la meilleure façon de le représenter.
Ce n'est pas une bonne idée. Les groupes d'entités ne doivent être utilisés que lorsque cela est nécessaire pour les transactions. From documentation: "N'utilisez les groupes d'entités que lorsqu'ils sont nécessaires pour les transactions Pour les autres relations entre entités, utilisez les propriétés ReferenceProperty et les valeurs Key, qui peuvent être utilisées dans les requêtes." – Blixt
Rappelez-vous également: le parent d'une entité ne peut pas être changé, mais un objet ReferenceProperty peut le faire! – Trevor
- 1. Comment stocker des expressions régulières dans le magasin de données Google App Engine?
- 2. Stockage des images téléchargées sur Google App Engine avec Java
- 3. Sortie de données hiérarchiques à partir de la banque de données App Engine vers JSON?
- 4. Méthode get_by_id sur les classes Model dans le magasin de données Google App Engine
- 5. Comment ajouter plus de 500 entrées au magasin de données avec put() dans google app engine?
- 6. Importer des fichiers dans Google App Engine
- 7. Incompatibilité de la base de données Google App Engine
- 8. Quel est le bon modèle pour les requêtes inexactes dans le magasin de données Google App Engine?
- 9. Google App Engine Téléchargement de fichiers volumineux
- 10. sur la relation un à plusieurs dans le magasin de données et dereferncing dans google app engine?
- 11. auto-rejoindre dans google app engine (java)
- 12. Contraintes dans google-app-engine?
- 13. Google App Engine: Enregistrement d'une liste d'objets?
- 14. Comment importer des objets BLOB d'images dans Google App Engine?
- 15. Quel est le moyen le plus simple d'exporter des données depuis une application google app engine?
- 16. Comment synchroniser en direct les banques de données dev sur Google App Engine?
- 17. des données hiérarchiques de clonage
- 18. Pourquoi "pas" Google App Engine?
- 19. Problème avec Google App Engine
- 20. OpenID pour Google App Engine
- 21. Ecommerce avec django dans google app engine
- 22. Google App Engine sur Silverlight
- 23. Déboguer le SDC de Google App Engine - Que signifie USER_NOT_HOSTED?
- 24. Comment interrogez-vous l'ensemble des utilisateurs de Google App Domain dans votre projet Google App Engine?
- 25. Erreur dans l'index des besoins de Google App Engine
- 26. Problème HttpSession dans Google App Engine/J
- 27. Static 301 dans Google App Engine?
- 28. Stockage de modèles composites (données hiérarchiques) dans la base de données
- 29. Connexions totalement personnalisées dans google app engine
- 30. User-Agent dans Google App Engine python
Point (2) répond à ma requête! Merci. – MathOldTimer
Il semble que (2) et (1) font la même chose, mais que (1) serait beaucoup moins cher. Il me semble qu'une liste de clés est assez chère en termes de coût de stockage, qui ne ferait que s'aggraver à mesure que l'arbre se creuserait. En outre, ne serait pas (1) conduire à une bonne localité? –
Le support ancêtre intégré utilise la même technique que 2 - il stocke une liste d'ancêtres en interne. L'avantage de 2 est que vous n'avez pas la limitation du taux de transaction. La localité n'est pas un problème. –