GAE Appstats RPC时间轴图表显示复杂NDB查询的长时间延迟

时间:2014-03-11 14:48:48

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

我已从我的生产应用搜索页面下方附加了Appstats。该页面需要约45秒才能通过AJAX加载结果。大约有100个实体。查询如下所示:

qry_1 = X.query(ndb.AND(X.active_status=="active", X.property_3==input_3, X.property_4==input_4, X.property_5==input_5, X.property_6.IN(input_6_list), X.property_20.IN(input_20_list))) 
record_list = qry_1.fetch() 

# input_6_list contains ~5 string items 
# input_20_list contains ~5 string items 

我无法弄明白:
    为什么在RPC调用之间的下图中显示空白空间..它们表示什么...如何阻止它们,因为它们使我的网站无法使用     为什么查询需要很长时间才能完成

Appstats Timeline

Call Trace指向我的代码中的以下行:

record_list = qry_1.fetch() 

调用跟踪线显示它:

  <path[0]>/main.py:6332 post() 

1 个答案:

答案 0 :(得分:3)

your previous question以来情况并没有真正改变。您的数据看起来非常关系。该模型使得它强制查询执行大量索引查找以满足AND和IN操作。简而言之,目前的模型永远不会扩展。它必须完全重组。

从查询开始创建新结构 - 用最少的查询参数和索引查找输出所需数据的最快(换句话说最简单)方法是什么?您可以连接所有旧的查询参数(属性),散列结果,最后使用单个键在单个索引中查找。快速。然后从那里向后工作以存储您的记录,以便每个属性组合哈希到唯一键和相应的结果记录。您必须接受冗余(对于不同的属性组合多次存储相同的结果),但这是NoSQL方式,而不是第三范式。

在这些StackOverflow问题中,还有一些其他可能有用的建议可用于重新构建数据:Storing song, artist and album dataHow to store document structure

第二个答案:如果您的数据模型不灵活,请将数据存储替换为Cloud SQL,因为对小型数据集进行复杂查询会更快。