2010-02-24 43 views
1

在Python,说我有A具有的ReferenceProperty b模型类B,它具有的ReferenceProperty c模型C类类的模型。参考模型加载谷歌应用程序引擎

假设A实例已经存在于数据存储,我可以这样得到它:

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

在这种情况下,如何做实体装载工作?检索a时是否检索到a.b?检索a.b时是否检索到a.b.cbc仅在第一次访问时才被检索?如果我要在内存缓存中存储a,是否还会存储bc?如果不是,当a退出memcache时,何时会检索它们?

我问这些问题(除了好奇心之外)的原因是因为我有一个实体,我想存储在memcache中,但它链接到另一个实体(链接到另一个实体等),以及链接实体的总大小可能大于1MB。

谢谢!

回答

2

当您第一次访问模型时,模型将被取消引用。所以调用a.b会得到b,调用a.b.c会得到c。

看一看尼克·约翰逊的博客大约memcahing车型的一些技巧: http://blog.notdot.net/2009/9/Efficient-model-memcaching

+0

这里是泡菜VS proto_buf一些额外的讨论:http://groups.google.com/group/google-appengine/browse_thread/thread/f91ec576cddc75de/5a6b0d8ea28e02a1 – 2010-02-24 21:16:48

+0

啊,是的,我听说过pickle-vs-pb的东西。我不知道腌一根普通的线有多快? – Cameron 2010-02-25 00:08:56

+0

在我的测试中,酸洗一个字符串比酸洗一个非常简单的模型实例快得多(10倍)。 – 2010-02-25 01:12:46

1

ReferenceProperties是懒惰加载的。 b将不会从数据存储中查找,直到您实际使用它为止。