GAE MapReduce巨大的查询

时间:2012-11-18 22:18:46

标签: google-app-engine mapreduce entity syndication

摘要:MapReduce在处理数据库中的数据集时是一个好主意,而不是找到一些有点复杂(或只是大问题)的答案吗?

我想同步一组联合来源(例如http://xkcd.com/rss.xml)等网址,这些联合来源存储在GAE的数据存储区中作为集合/表格。我看到两种选择,一种是直截了当的。制作您放入队列的简单任务,每个任务处理100或1000或任何自然数似乎适合每个任务。另一个选项是MapReduce。

在后一种情况下,Map会执行所有操作,而Reduce不会执行任何操作。此外,地图没有结果,它只是改变了(数据存储区的)'状态'。

@Override public void map(Entity entity) {
    String url = (String)entity.getProperty("url");
    for(Post p : www.fetchPostsFromFeed(url)) {
        p.save();
    }
}

正如您所看到的,一个来源可以映射到很多帖子,所以我的地图也可能被称为“爆炸”。

所以没有发射,也没有什么可以减少。我之所以喜欢这种地图方法,是因为我告诉谷歌:在这里,拿出我的收藏/表格,然后拆分它,不管你认为哪个适合不同的地图制作者,然后将帖子存储在你喜欢的地方。数据存储使用“高复制”。因此,数据的可用性很高,并且是什么“计算单元”实际上不会真正减少网络通信的最佳选择。保存帖子也是如此,因为它们需要转到所有数据存储单元。我喜欢的是mapreduce有一些故障恢复方法可以解决被卡住的地图计算问题,并且它知道要向哪个节点发送多少任务,而不是在某个地方排队一些希望它有意义的实体。

也许我的思维方式错了,在这种情况下,请纠正我。无论如何,这种方法对于缺乏减少和地图是否“爆炸”是“错误的”?

1 个答案:

答案 0 :(得分:1)

Nope,Map pretty与手动排队任务一样。