GAE应用程序和GQL

时间:2011-01-11 19:16:38

标签: google-app-engine gql

我需要创建一个应用程序来收集下载信息(NameOfWebSite,DateTimeofVisit),之后我想收到有关每个定义时段(月,周,年)的访问次数的信息,按访问次数排序每个时期。例如:

www.google.com每个定义的时段访问次数为2345次

www.yahoo.com每个定义的时段访问1254次

www.abracadabra.com每个定义的时间段内访问次数

我可以借助GQL做到这一点吗? 在普通的SQL中,它会像

一样
  

选择NameOfWebSite,count(*)from   TABLE group by NameOfWebSite where   DateTimeofVisit> XXX和   DateTimeofVisit< YYY

如何根据GAE和GQL实现此逻辑更好?

2 个答案:

答案 0 :(得分:1)

GQL不支持GROUP BY并汇总COUNTMAX等功能。这就是为什么它被称为GQL而不是SQL。查看GQL Reference了解详情。

Google App Engine不允许使用聚合功能,这是一种可扩展性的权衡。因此,如果您需要对数据集执行聚合函数,则必须自己执行此操作。如果它是一个简单的计数器,您可以存储一个计数器,并在每次添加符合条件的记录时递增计数器。对于具有模糊维度的更复杂的聚合函数(用于分组),您必须提出自定义解决方案。没有一个简单的答案。

尼克的建议可能是其中一个解决方案;有任务检查条件并定期计算聚合函数。但它永远不会准确,它总是近似的东西。这也是为什么Google没有显示与特定搜索查询匹配的确切结果数量的原因,因为他们不知道,至少他们不想计算它们,他们只提供估算。

答案 1 :(得分:0)

您不能直接在GQL中执行此操作。相反,您应该使用mapreduce API或您自己的任务队列任务来定期计算聚合,并将它们存储在数据存储区中。