【问题标题】:Referenced Model Loading in Google App EngineGoogle App Engine 中的引用模型加载
【发布时间】:2010-02-24 20:47:56
【问题描述】:

在 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 中的实体,但它链接到另一个实体(它链接到另一个实体等),并且链接实体的总大小可能超过 1MB。

谢谢!

【问题讨论】:

    标签: python google-app-engine model memcached loading


    【解决方案1】:

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

    查看 Nick Johnson 的博客,了解有关 memcahing 模型的一些提示: http://blog.notdot.net/2009/9/Efficient-model-memcaching

    【讨论】:

    • 这里有一些关于 pickle 与 proto_buf 的额外讨论:groups.google.com/group/google-appengine/browse_thread/thread/…
    • 啊,是的,我听说过 pickle-vs-pb 的事情。我想知道腌制普通字符串有多快?
    • 在我的测试中,酸洗一个字符串比酸洗一个非常简单的模型实例要快得多(10 倍)。
    【解决方案2】:

    ReferenceProperties 是延迟加载的。 b 在您实际用于某事之前不会从数据存储中查找。

    【讨论】:

      猜你喜欢
      • 2020-08-26
      • 1970-01-01
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 2011-05-06
      相关资源
      最近更新 更多