1

我们正在为我们的应用程序使用 AppEngine 和数据存储,其中我们有一个中等大小的信息表,其中包含一个带有条目的列表。

我想总结报告中的条目列表,指定每个条目出现多少次,例如通常在 SQL 中我只会使用select distincta 列,然后遍历每个条目并使用select count(x) where value = valueOfEntry.

虽然计数部分很容易完成,但明显的问题是“问题”。我能远程找到的唯一解决方案是 MapReduce,并且大多数示例都基于 Python。有这个博客条目非常有用,但有些过时,因为它早于 reduce 部分。然后是这里的视频和我能找到的更多资源。

但是,如果我不能写入单独的实体并且我没有减少阶段,我真的很难理解如何构建汇总表?

这似乎是一件微不足道且简单的事情,但需要这么多的箍,是否没有示例或现有的报告引擎我可以直接插入 AppEngine 而没有所有的摩擦?

我看到了BigQuery,但是将数据从应用程序引擎移出并进入该商店似乎很麻烦。我尝试将数据下载为 CSV,但也遇到了很多问题。从长远来看,这似乎也不是一个实用的解决方案。

4

2 回答 2

1

有一个文档解释了 java 的 mapreduce 的一些概念。虽然它不完整,但它与 python 版本共享大部分架构。在该文档中,还有一个指向完整的 java 示例 mapreduce 应用程序的指针,该应用程序从数据存储中读取。

为了编写结果,您指定一个Outputclass。要将结果写入新的数据存储实体,您需要创建自己的输出类。但您也可以使用 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,因为您的数据集大小有限,但您会失去复制和容错功能。

于 2012-09-10T21:10:36.887 回答
1

我认为这可以帮助你:http: //jjmpsj.blogspot.ro/2008/05/appengine-output-tricks-reporting.html ?m=1

于 2012-09-10T21:19:38.073 回答