摘要: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有一些故障恢复方法可以解决被卡住的地图计算问题,并且它知道要向哪个节点发送多少任务,而不是在某个地方排队一些希望它有意义的实体。
也许我的思维方式错了,在这种情况下,请纠正我。无论如何,这种方法对于缺乏减少和地图是否“爆炸”是“错误的”?
答案 0 :(得分:1)
Nope,Map pretty与手动排队任务一样。