【发布时间】:2012-07-22 00:24:30
【问题描述】:
我在 python 2.7 中使用 NDB 并开启了线程安全模式。
我了解使用 NDB 查询实体不使用本地缓存或内存缓存,而是直接进入数据存储区,这与通过键名获取不同。 (如果这个前提不正确,剩下的问题可能是多余的。)
因此,一个好的范例是仅使用 keys_only=True 进行查询,然后执行 get_multi 以获得完整实体?
好处是 keys_only=True 查询比 keys_only=False 快得多,get_multi 可能会直接命中 memcache 并且通过调用 get_multi 您的实体现在保存在 memcache 中,以防您需要再次进行查询。
缺点是您现在有一个 RPC 查询调用 + get_multi 调用,我认为您可以在一个 get_multi 中调用的实体数量是有限的,因此您的有效查询大小可能会受到限制。
你怎么看?我们是否应该只使用 keys_only=True 查询然后执行 get_multi?是否存在某些最小和最大查询大小限制,从而使该技术不如仅执行返回完整实体的查询有效?
【问题讨论】:
-
考虑您的应用程序数据访问模式,如果您的大部分查询结果不太可能在缓存中,或者不太可能在一段时间内再次使用,那么您将始终有很高的缓存未命中率。至于仅键查询和 get_multi 与普通查询之间的直接性能比较 - 为什么不对预期的使用模式进行一些测试。
标签: python google-app-engine app-engine-ndb