2012-09-07 19 views
1

我們正在使用AppEngine和我們的應用程序的數據存儲,我們有一個包含條目列表的中等大小的信息表。是否有任何appengine Java報告生成樣本?

我想總結報告中的條目列表,指定每條條目出現的次數,例如,通常在SQL中,我只需使用select distinct作爲列,然後遍歷每個條目並僅使用select count(x) where value = valueOfEntry

雖然計數部分很容易完成,但不同的問題是「一個問題」。我能找到的唯一解決方案就是MapReduce,大部分示例都基於Python。有this blog entry這是非常有用的,但有點過時,因爲它早於減少部分。然後是視頻here和我能找到的一些其他資源。

然而,它真的很難讓我明白如何構建他彙總表,如果我不能寫一個獨立的實體,我沒有減少的階段?

這看起來似乎微不足道,容易做到,但需要這麼多的籃球,有沒有樣品或現有的報表引擎,我就可以不用插件所有的摩擦AppEngine上?

我看到BigQuery,但它似乎就像一個巨大的麻煩,將數據移出應用程序引擎,進入那家商店。我嘗試將數據下載爲CSV,但也遇到了許多問題。從長遠來看,它似乎不是一個實際的解決方案。

回答

1

有一個document解釋一些映射縮減爲Java的概念。雖然它不完整,但它與Python版本共享大部分體系結構。在該文檔中,還有一個指向從數據存儲中讀取的complete java sample mapreduce app的指針。

要編寫結果,請指定Output class。要將結果寫入新的數據存儲實體,您需要創建自己的輸出類。但是你也可以使用blobstore(請參閱BlobFileOutput.java)。

其他替代方案,是每當你寫你的實體,您也可以編寫/更新另一個進入一個EntityDistinct數據模型。

如果您計劃執行復雜的報告,並且現在可以預測您的所有需求,我建議您再次查看Big Query。 BigQuery功能非常強大,可以在非常大型的數據集上完美工作。您可以檢查http://code.google.com/p/log2bq/這是一個使用mapreduce將日誌加載到Big Query中的python項目。或者你也可以有一個cron工作,每隔一段時間就會獲取所有新實體並將它們移動到Big Query中。

相關摩擦,記住,這是一個沒有SQL數據庫,因此具有一定的優勢,但有些事情是到SQL本質上的不同。請記住,您始終可以使用Google Cloud SQL,因爲您的數據集的大小有限,但您將失去複製和容錯功能。

+0

謝謝。我已經完成了所有這些工作,我希望能有一些額外的工作,而不是從字數開始。少數人確實早一點減少支持。 我也希望像第三方報表引擎支持Appengine?其他開發者不需要這樣的東西嗎? –

+0

雖然我對答案並不滿意,但更多的是可用的問題,而不是塞巴斯蒂安本身的答案,所以我接受了這一點。 希望如果這種情況是固定的人可以在這裏發佈更好的答案。 –