NDB在key.get()的封面下做了什么?

时间:2012-04-17 18:47:15

标签: google-app-engine app-engine-ndb

我开始使用NDB,因为它提供了一些非常好的功能,并且通常应该比我通过自己的缓存层实现时更优化。

但是,我并不了解像key.get()这样的简单操作的所有内容。 Appstats表明,在此类操作期间,在刚启动的开发服务器上,将生成4个RPC:

@434ms memcache.Get real=1ms api=0ms
@437ms memcache.Set real=1ms api=0ms
@438ms memcache.Get real=2ms api=0ms
@441ms datastore_v3.Get real=4ms api=0ms

为什么我们有2个memcache.Get ops?为什么memcache.Set出现在datastore_v3.Get之前? 我使用默认的缓存选项。 查看ndb.context.get给出了一些见解,但我仍然感到困惑。 memcache.Set是关于LOCK的。但两个Get调用看起来完全相同,为什么数据存储区Get后没有Set?

1 个答案:

答案 0 :(得分:2)

您是否在顶级函数或WSGI应用程序对象周围使用了@ ndb.toplevel()?这是一个常见问题,如果省略,实际的Set调用永远不会执行。请参阅http://code.google.com/p/appengine-ndb-experiment/issues/detail?id=105(点击评论5中组的链接!)。