2011-01-11 93 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不允許聚合函數,它是一種可擴展性的權衡。因此,如果您需要對數據集執行集合函數,則必須自行完成。如果它是一個簡單的計數器,您可以存儲計數器並在每次添加符合條件的記錄時增加計數器。對於更復雜的具有模糊維度的集合函數(用於分組),您必須提出自定義解決方案。沒有簡單的答案。

尼克的建議可能是解決方案之一;有一個任務來檢查條件並定期計算聚合函數。但它永遠不會準確,它總是一些近似的東西。這也是爲什麼谷歌沒有顯示匹配特定搜索查詢的確切結果數量,因爲他們不知道,至少他們不想計算它,他們只是提供估計。