代码之家  ›  专栏  ›  技术社区  ›  Shai Almog

是否有用于appengine Java报告生成的示例?

  •  1
  • Shai Almog  · 技术社区  · 12 年前

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

    我想总结一下报告中的条目列表,指定每个条目出现的次数。例如,在SQL中,我通常只使用 select distinct 对于一列,然后在每个条目上循环,然后使用 select count(x) where value = valueOfEntry

    虽然计数部分很容易完成,但明显的问题是“一个问题”。我能找到的唯一接近这一点的解决方案是MapReduce,大多数示例都是基于Python的。有 this blog entry 这是非常有帮助的,但有些过时,因为它早于减少部分。然后是视频 here 还有一些我能找到的资源。

    然而,如果我不能向一个单独的实体写信,并且没有reduce阶段,我真的很难理解如何构建汇总表?

    这似乎是一件琐碎而简单的事情,但需要很多困难,难道没有样本或现有的报告引擎吗?我可以直接插入AppEngine而不需要所有的摩擦吗?

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

    2 回复  |  直到 12 年前
        1
  •  1
  •   Sebastian Kreft    12 年前

    有一个 document 解释mapreduce for java的一些概念。尽管它是不完整的,但它与python版本共享了大部分架构。在该文档中,还有一个指向 complete java sample mapreduce app ,从数据存储中读取。

    为了编写结果,您可以指定 Output class 。要将结果写入新的数据存储实体,您需要创建自己的输出类。但是您也可以使用blobstore(请参阅BlobFileOutput.java)。

    另一种选择是,无论何时编写一个实体,都会将另一个条目写入/更新到EntityDistinct数据模型。

    如果您计划执行复杂的报告,并且您现在可以预测所有需求,我建议您再次查看Big Query。BigQuery非常强大,可以在非常庞大的数据集上完美地工作。您可以检查 http://code.google.com/p/log2bq/ 这是一个python项目,使用mapreduce将日志加载到Big Query中。或者,您还可以有一个cron作业,它每隔一段时间就会获取所有新实体并将它们移动到Big Query中。

    与摩擦有关,请记住,这是一个无sql数据库,因此有一些优点,但有些地方与sql本质上不同。记住,你可以随时使用 Google Cloud SQL ,假设您的数据集大小有限,但您会失去复制和容错功能。