Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 最好按关键字\u only=True进行查询,然后获取\u multi还是只进行完整查询?_Python_Google App Engine_App Engine Ndb - Fatal编程技术网

Python 最好按关键字\u only=True进行查询,然后获取\u multi还是只进行完整查询?

Python 最好按关键字\u only=True进行查询,然后获取\u multi还是只进行完整查询?,python,google-app-engine,app-engine-ndb,Python,Google App Engine,App Engine Ndb,我在Python2.7中使用NDB,并且启用了线程安全模式 我知道,使用NDB查询实体不使用本地缓存或memcache,而是直接进入数据存储,而不是按键名获取。(如果这个前提不正确,问题的其余部分可能是多余的。) 因此,一个好的范例是只使用key_only=True进行查询,然后执行get_multi来获取完整的实体吗 这样做的好处是,keys_only=True查询比keys_only=False快得多,get_multi可能只会点击memcache&通过调用get_multi,您的实体现在保

我在Python2.7中使用NDB,并且启用了线程安全模式

我知道,使用NDB查询实体不使用本地缓存或memcache,而是直接进入数据存储,而不是按键名获取。(如果这个前提不正确,问题的其余部分可能是多余的。)

因此,一个好的范例是只使用key_only=True进行查询,然后执行get_multi来获取完整的实体吗

这样做的好处是,keys_only=True查询比keys_only=False快得多,get_multi可能只会点击memcache&通过调用get_multi,您的实体现在保存在memcache中,以防您需要再次执行查询

缺点是您现在有一个RPC查询调用+get_multi调用,我认为在一个get_multi调用中可以调用的实体是有限制的,因此您的有效查询大小可能会受到限制


你觉得怎么样?我们是否应该只使用key\u only=True进行查询,然后执行get\u multi?是否存在某些最小和最大查询大小限制,使得该技术不如只执行返回完整实体的查询有效?

这一点已经得到了广泛的研究。请参见

考虑您的应用程序数据访问模式,如果查询结果的很大一部分不太可能在缓存中,或者在一段时间内不太可能再次使用,那么您的缓存未命中率将始终很高。至于仅键查询和get_multi查询与普通查询之间的直接性能比较,为什么不对预期的使用模式运行一些测试呢?谢谢链接。总之,如果您知道大多数实体已经在memcache中,那么执行只包含键的查询以及返回实体键的get\u multi查询是有好处的。