Quelles sont les implications en termes de performances des polymodèles par rapport aux modèles Bigtable normaux dans Google App Engine?

12

Qu'est-ce qui produit les meilleures performances dans une utilisation normale de Google App Engine, un polymodèle ou un modèle "Bigtable" normal?

Le polymodèle, en effet, crée une colonne dans la table parent appelée "classe" qui fournit le suivi de l'héritage. Alors qu'une Bigtable normale, héritée d'une classe parent, crée une nouvelle structure de données distincte, sans possibilité d'interroger le parent et de trouver tous les enfants de toutes les classes sous-typées.

Brian Ballsun-Stanton
la source

Réponses:

3

Il y a probablement une différence de performances, mais elle est probablement assez petite.

Voici ce que j'ai trouvé (tous basés sur les documents Google pour Python ).

  1. BigTable ne prend pas en charge les informations PolyModel de manière native. Au lieu de cela, il est implémenté à l'aide d'une propriété 'class'. Ainsi, lorsque vous essayez d'effectuer une recherche, par exemple, pour trouver une classe de base, vous effectuez une recherche sur cette propriété «class».

  2. Toutes les requêtes qui utilisent la classe PolyModel ont un filtre supplémentaire appliqué qui filtre par la classe donnée (en utilisant la propriété 'class').

  3. Tous les index créés pour une classe PolyModel doivent prendre en compte la colonne supplémentaire «classe».

Essentiellement, la classe PolyModel prend en charge la propriété «class» seule, en l'insérant dans les requêtes et en l'utilisant pour d'autres requêtes. En dehors de cela, il fonctionne de manière identique à l'utilisation standard de BigTable.

Ainsi, la différence consiste simplement à ajouter et à maintenir une colonne supplémentaire.

Y a-t-il une différence de performances? Oui, probablement. Chaque colonne que vous ajoutez à n'importe quel système de base de données aura un impact sur les performances. Mais est-ce significatif? Probablement pas.

Richard
la source