【问题标题】:GAE Application and GQLGAE 应用程序和 GQL
【发布时间】:2011-06-07 09:26:07
【问题描述】:

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

www.google.com 2345 次访问/定义时间

www.yahoo.com 1254 次访问/定义时间

www.abracadabra.com 每个指定时间段访问 5 次

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

选择 NameOfWebSite, count(*) from TABLE 组按 NameOfWebSite 其中 DateTimeofVisit>XXX 和 访问日期时间

在 GAE 和 GQL 方面如何更好地实现这个逻辑?

【问题讨论】:

    标签: google-app-engine gql


    【解决方案1】:

    GQL 不支持 GROUP BY 和聚合函数,如 COUNTMAX。这就是为什么它被称为GQL 而不是SQL。更多信息请查看GQL Reference

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-06
        • 2014-02-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多