我需要创建一个应用程序来收集下载信息(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实现此逻辑更好?
答案 0 :(得分:1)
GQL
不支持GROUP BY
并汇总COUNT
,MAX
等功能。这就是为什么它被称为GQL
而不是SQL
。查看GQL Reference了解详情。
Google App Engine不允许使用聚合功能,这是一种可扩展性的权衡。因此,如果您需要对数据集执行聚合函数,则必须自己执行此操作。如果它是一个简单的计数器,您可以存储一个计数器,并在每次添加符合条件的记录时递增计数器。对于具有模糊维度的更复杂的聚合函数(用于分组),您必须提出自定义解决方案。没有一个简单的答案。
尼克的建议可能是其中一个解决方案;有任务检查条件并定期计算聚合函数。但它永远不会准确,它总是近似的东西。这也是为什么Google没有显示与特定搜索查询匹配的确切结果数量的原因,因为他们不知道,至少他们不想计算它们,他们只提供估算。
答案 1 :(得分:0)
您不能直接在GQL中执行此操作。相反,您应该使用mapreduce API或您自己的任务队列任务来定期计算聚合,并将它们存储在数据存储区中。