【问题标题】:Is it best to query by keys_only=True then get_multi or just full query?最好通过 keys_only=True 然后 get_multi 查询还是完全查询?
【发布时间】: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


【解决方案1】:

【讨论】:

  • 感谢您的链接。总而言之,如果您知道大多数实体已经在内存缓存中,那么执行 keys_only 查询然后执行 get_multi 并返回实体键是有好处的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 2011-04-01
  • 2019-01-01
  • 1970-01-01
  • 2011-06-05
  • 2017-08-06
相关资源
最近更新 更多