2012-09-07 22 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

虽然我对答案并不满意,但更多的是可用的问题,而不是塞巴斯蒂安本身的答案,所以我接受了这一点。 希望如果这种情况是固定的人可以在这里发布更好的答案。 –