GAE DataStore按键检索实体并按日期过滤 - 性能低下

时间:2017-06-01 07:08:58

标签: google-app-engine google-cloud-datastore app-engine-ndb google-app-engine-python

我使用NDB查询通过IN运算符按键列表检索实体,然后按日期过滤。该查询被分解为几个子查询,这些查询是用doc编写的。并按顺序而不是并行运行。

[]int

查询分析图显示了顺序运行的子查询。 25键需要大约0.3秒。查询延迟与要获取的密钥数成线性关系。

query profiling

有没有办法优化查询,按键检索实体和按日期范围过滤的最佳做法是什么?

1 个答案:

答案 0 :(得分:2)

问题在于IN运算符。

对于键中的每个键,GAE将执行单个查询。

来自GAE文档:

  

IN运算符还执行多个查询:一个用于指定列表中的每个项目,所有其他过滤器保持不变,IN过滤器替换为等号(=)过滤器。结果按列表中的项目顺序合并。如果查询具有多个IN过滤器,则会将其作为多个查询执行,每个查询对应于IN列表中每个可能的值组合。

     

包含不等于(!=)或IN运算符的单个查询仅限于   不超过30个子查询。

https://cloud.google.com/appengine/docs/standard/python/datastore/queries

modified_date没问题,因为有一个索引,因此效率很高。