2010-02-24 79 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將不會從數據存儲中查找,直到您實際使用它爲止。