2010-02-24 15 views
1

En Python, disons que j'ai un modèle de classe A qui a une ReferenceProperty b pour modéliser la classe B, qui a une ReferenceProperty c pour modéliser la classe C.Modèle Chargement en Referenced Google App Engine

En supposant une instance de A existe déjà dans le magasin de données, je peux l'obtenir en disant:

q = A.all() 
a = q.get() 

Dans ce scénario, comment fonctionne le chargement de l'entité? Est-ce que a.b est récupéré lorsque a est récupéré? Est-ce que a.b.c est récupéré lorsque a.b est récupéré? Les numéros b et c sont-ils récupérés uniquement lors de leur premier accès? Si je devais stocker a dans memcache, b et c seraient également stockés? Si ce n'est pas le cas, quand est-ce que je serais récupéré quand je recevrais a de memcache? La raison pour laquelle je pose ces questions (outre la curiosité) est parce que j'ai une entité que je voudrais stocker dans memcache, mais elle lie à une autre entité (qui lie à une autre entité, etc.), et la taille totale des entités liées peut être supérieure à 1 Mo.

Merci!

Répondre

2

Les modèles seront déréférencés lors de votre première consultation. Donc appeler a.b obtiendra b, et appeler a.b.c obtiendra c.

Jetez un oeil sur le blog de Nick Johnson pour quelques conseils sur les modèles memcahing: http://blog.notdot.net/2009/9/Efficient-model-memcaching

+0

Voici une discussion supplémentaire sur cornichon vs proto_buf: http://groups.google.com/group/google-appengine/browse_thread/thread/f91ec576cddc75de/5a6b0d8ea28e02a1 –

+0

Ah oui, j'ai entendu parler de la chose pickle-vs-pb. Je me demande à quelle vitesse il faut décaper une corde plate? – Cameron

+0

Dans mes tests, le décapage d'une chaîne est significativement (un facteur 10) plus rapide que le décapage d'une instance de modèle très simple. –

1

RéférenceLes propriétés sont chargées paresseusement. b ne sera pas recherché dans le magasin de données tant que vous ne l'utiliserez pas pour quelque chose.