J'ai un modèle de données simple qui comprendGoogle App Engine: Mauvaises performances avec JDO + Datastore
UTILISATEURS: stocker des informations de base (clé, nom, numéro de téléphone, etc.)
RELATIONS: décrire, par exemple une amitié entre deux utilisateurs (fournissant un relationship_type + deux clés utilisateur)
COMMENTAIRES: posté par les utilisateurs (clés, le texte de commentaire, user_id)
j'obtenir des performances très pauvres, par exemple, si je tente de imprime les prénoms de tous les amis d'un utilisateur. Dire que l'utilisateur a 500 amis: Je peux aller chercher la liste des amis user_ids très facilement dans une seule requête. Mais ensuite, pour sortir les prénoms, je dois faire 500 allers et retours vers le Datastore, chacun d'entre eux semblant prendre de l'ordre de 30 ms. Si c'était SQL, je ferais juste un JOIN et obtenir la réponse rapidement. Je comprends qu'il existe des installations rudimentaires pour réaliser des jointures bidirectionnelles à travers des relations non-possédées dans une implémentation détendue de JDO (comme décrit à http://gae-java-persistence.blogspot.com) mais elles semblent expérimentales et non standard (par exemple mon code ne fonctionnera pas dans toute autre mise en œuvre de JDO). Pire encore, que se passe-t-il si je veux sortir tous les commentaires postés par les amis d'un utilisateur. Ensuite, je dois obtenir de User -> Relation -> Comments, c'est-à-dire une jointure à trois voies, qui n'est même pas supportée expérimentalement. L'overhead de 500 va-et-vient pour obtenir une liste d'amis + 500 autres voyages pour voir s'il y a des commentaires des amis d'un utilisateur est déjà suffisant pour pousser le temps d'exécution> 30 secondes.
Comment les gens gèrent-ils ces problèmes dans les applications JDO soutenues par la banque de données réelles? (Ou ils le font?)
Est-ce que quelqu'un a réussi à extraire des performances satisfaisantes de JDO/Datastore dans ce genre de situation (très commune)?
-Bosh
À moins que AppEngine ne prenne en charge les appels à contains() sur les champs Collection, il semble que vous ayez la meilleure solution. – Gunslinger47