在Google应用引擎中优化联接查询性能

时间:2011-03-24 05:58:52

标签: python google-app-engine

方案

  • Entity1(id,itmname)

  • Entity2(id,itmname,price)

  • Entity3(id,itmname,profit)

  • 利润和价格都是IntegerProperty

我想要计算价格超过500且价格超过10的所有商品。

我知道它的加入操作,谷歌不支持。我尽力找出其他方式,然后单独执行查询并执行计数,但我没有得到任何东西。

不单独执行查询的原因是查询执行时间。在每个查询中,我得到的结果超过50000条记录,因此从第一次查询中获取记录需要将近20秒。

2 个答案:

答案 0 :(得分:1)

Google App Engine开发人员一直专注于读取优化,这是非规范化的一个方面。在设计数据结构之前,您应该处理可以检索数据的可能情况。稍后设计模型。仔细看看I / O会话 Building Scalable Web Applications with Google App Engine将证明有用。

在目前的情况下,如果您对只是计数感兴趣,可以使用shard counter。如果字段更新,它将要求您更新每个关联的计数器。

另一种方法涉及执行夜间计划任务,这将执行繁重的计算,并更新您可能需要的计数和其他统计数据。在这种情况下,您可能会发现mapreduce有帮助。这种方法永远不会为您提供实时数据。

答案 1 :(得分:0)

这个问题的标准解决方案是非规范化。尝试在price中存储profitEntity1的副本,然后您可以通过Entity1上的一个简单查询来回答您的问题。