【问题标题】:Temporary Collection in MongoDBMongoDB 中的临时集合
【发布时间】:2013-03-31 08:18:37
【问题描述】:

我无法理解 mongodb MapReduce 文档 (http://docs.mongodb.org/manual/applications/map-reduce/) 中的这一段 - 临时集合(优化?)有什么好处(商业案例、好处等)?

临时收藏

map-reduce 操作使用临时 在加工过程中收集。完成后,map-reduce 操作 重命名临时集合。因此,您可以执行 定期使用相同的目标集合名称进行 map-reduce 操作 不影响中间状态。使用此模式时 定期生成统计输出集合。

【问题讨论】:

    标签: mongodb mapreduce aggregation-framework nosql


    【解决方案1】:

    假设您是 { a : 1 } 形式的文档集合,并且您定期需要 a 的平均值。还可以假设您想要运行一个 map-reduce 作业,该作业将每个文档的“a”字段增加一个。然而,当这个 map reduce 正在运行时,也有可能获得 a 平均值的作业正在运行。在这种情况下,如果您没有临时集合,则平均值可能会因为 map reduce 作业尚未完成而被抛出,从而使集合处于中间状态。

    为避免这种情况,map reduce 作业可以在临时集合中工作,直到完成。完成后,它将临时集合重命名为目标名称,有效地换入新集合。这样,当您取“a”的平均值时,您会得到一个不受 map-reduce 作业部分影响的值。

    如果您希望我澄清一下,请告诉我。

    【讨论】:

    • 实际上,尝试重新阅读了几次,但不知何故无法理解:我们为什么要让 job 和 map-reduce 并行运行?为什么会抛出平均值以及它与“我目前不会拥有它”的临时集合有何关系?如果“是”而不是“不是”会发生什么?
    • 使用临时集合的目的是让您可以同时运行多个作业。如果 map-reduce 无法在临时集合中运行,则 2 个作业可能会在同时运行时相互干扰。平均值将被修改,因为当一个进程对值求和时,另一个进程正在更改值,因此它们接触值的顺序会影响最终平均值。请注意确保我理解您的最后一个问题
    猜你喜欢
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多