2011-01-11 52 views
1

我需要创建一个应用程序,该应用程序将收集以下信息(NameOfWebSite,DateTimeofVisit),之后我想接收有关每个定义的时间段(月,周,年)的访问次数的信息,排序按每期访问次数计算。例如:GAE应用程序和GQL

www.google.com每定义的时间段2345次访问

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

www.abracadabra.com每定义的周期5次访问

灿我在GQL的帮助下做到了这一点? 在正常SQL这将是水木清华像

选择NameOfWebSite,COUNT(*)从 表组由NameOfWebSite其中 DateTimeofVisit> XXX和 DateTimeofVisit < YYY

它是如何更好地执行这在GAE和GQL方面的逻辑?

回答

0

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

1

GQL不支持GROUP BY和聚集函数,如COUNT,MAX。这就是为什么它被称为GQL而不是SQL。请检查GQL Reference了解更多信息。

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

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