NoSQL && mongodb 数据库



我想知道mongodb 中聚合管道映射减少之间的区别

聚合管道:

  • 预定义运算符的管道
  • 当使用分片时,一些运算符($match,$project)可以并行执行
  • 非常快
  • 您可以迭代输出,或者使用$out运算符将其存储到集合中
  • 易于开发和调试:从一个操作符开始,查看输出,继续使用下一个操作符,依此类推
  • 面向集合:对于整个集合,执行管道中的第一个运算符。输出是一个集合。对于该集合,执行第二个运算符,依此类推

MapReduce:

  • 用户自定义映射和reduce函数;用JavaScript编写
  • 你可以在其中编码"任何东西"(请不要访问map和reduce中的数据库!)
  • 使用分片时,map和reduce函数并行执行
  • reduce输出将被写入一个分片集合(shard-key为id)
  • 当您使用mapReduce方法时,例如在Java客户端API中,您可以对结果进行迭代。但即便如此,map和reduce也是JavaScript函数(作为字符串),而不是Java函数
  • 面向文档:对于集合中的每个文档,调用map函数。完成后,对于map函数调用中发出的每个不同键,调用reduce函数,并将值列表作为第二个参数。reduce函数的输出是一个文档

建议使用聚合管道,而不是MapReduce。它快速、强大,而且MongoDB优化查询的可能性更大。如果您需要编写自己的代码(例如,字符串操作、生成随机数、字数等),那么编写MapReduce作业会更容易。

最新更新