【问题标题】:MapReduce and SQL GROUP BYMapReduce 和 SQL GROUP BY
【发布时间】:2012-07-06 16:29:57
【问题描述】:

我一直在尝试了解 MongoDB 中 MapReduce 的基础知识,即使在实现它之后,我也不确定它与 SQL 的 GROUP BY 甚至是 Mongo 自己的 GROUP BY 有何不同。在 SQL Server 中,GROUP BY 可以通过流或散列聚合来完成。 MapReduce 是不是类似于哈希聚合,只是在大量服务器之上?

我一直在阅读 MR for MongoDB 将作为后台进程运行的地方,因为它是一个“繁重的操作”。鉴于数据是分片的,GROUP BY 不是同样“重”吗?也就是说,我只是想比较那些可以作为 MR 作业或使用 GROUP BY 查询来实现的操作类型。

有没有 GROUP BY 不能做,只有 MR 才能做的事情?

另外,Hadoop 似乎非常擅长 MR(这只是我读过的内容..我从未在 Hadoop 上工作过)。 Hadoop 的 MR 与 Mongo 有何不同?

我很困惑。请帮助或指导我找到一个很好的教程来解释 MapReduce 的需求。

【问题讨论】:

    标签: mongodb hadoop group-by mapreduce


    【解决方案1】:

    使用 MR 获得的就是速度。 GROUP BY 在 SQL 中是一个缓慢的操作,而 MR 在 MongoDB 中甚至更慢。但是您所做的是创建新集合并实时迭代它们。当您拥有大量数据并希望能够实时对其进行迭代时,这非常有用。

    在我正在处理的项目中,有一个 Python 脚本在后台运行(cron 作业),每天执行一次不同的 map/reduce。我们不是使用 SQL group by 迭代大型表,而是使用 MR 迭代一次,然后在创建的新集合上快速迭代。

    我没有 Hadoop 方面的经验。所以很抱歉我不能填写你。

    教程: http://www.mongovue.com/2010/11/03/yet-another-mongodb-map-reduce-tutorial/

    编辑:

    在这里,您可能会看到 SQL 查询到 MongoDB Map/Reduce 的完整转换: 取自:http://rickosborne.org/download/SQL-to-MongoDB.pdf

    【讨论】:

    • 感谢您的洞察力。如果我们可以动态生成新表并且将中间 MR 结果存储到其中?
    • 如果它确实回答了您的问题或至少投票,请不要忘记标记为答案! :)
    • 确实如此!谢谢 :) 然而,MySQL GROUP BY 和 MapReduce 之间近乎完美的映射让我认为它们具有同等的权力,除非这些中间集合的实时创建真的在幕后发生..我猜这一切都是有帮助的数据在各种分片上可用,并且 MR 作业必须在中间结果上反复运行才能获得最终结果..这在 SQL Server 中不会发生,您不存储中间结果..
    • 好吧,我不完全确定我是否遵循,但我的意思是 MySQL GROUP BY 实际上比 MongoDB 中的 Map/Reduce 操作更快,但如果您有 50.000 个用户查询 MySQL GROUP BY这将比在 MongoDB 中每 30 秒创建一次新集合要慢得多。但是,您可以在查询中使用 Map/Reduce,并使 MongoDB 仅临时使用新集合并仅用于该特定请求。
    【解决方案2】:

    很多人使用 MongoDB 作为数据存储,使用 Hadoop 进行处理,因为两者之间存在连接器。每个 MongoDB 节点可以处理多个 Hadoop 节点读入它。作为说明,我建议将 mongo 和 Hadoop 节点分开以获取内存。

    如果你没有,这里有一些文件给你

    另一件值得关注的事情是2.2 中出现的新aggregation framework。这是chart 将 SQL 中的操作与 MongoDB 聚合框架中的操作等同起来。

    【讨论】:

    • 是的,赞成 :) 再次感谢;你给了我一个全新的分支来探索!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 2010-11-20
    • 2020-01-19
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多