使用MongoDB MapReduce加入操作

Joh*_*sma 6 mapreduce mongodb

我以前一直在使用MapReduce来执行经典的MR操作,相当于SQL中的GROUP BY.

我想知道在概念上是否可以使用MapReduce执行JOIN操作.知道如何实现吗?将MapReduce用于此类操作是否有意义?

谢谢!

Chr*_*tow 4

MongoDB 不支持连接等关系操作。相反,您可以通过将要加入的行嵌入到外部文档中来对数据进行非规范化。products因此,您可以拥有一个具有以下架构的集合,而不是将 Products 连接到 Sales :

产品

{
    _id: 123,
    name: "Widget",
    price: 9.99
    sales:
    [ 
        { id:1, date: "20100316", howMany: 2 },
        { id:2, date: "20100316", howMany: 5 }
    ]
}
Run Code Online (Sandbox Code Playgroud)

然后,每当您检索产品时,您还会获得其销售数据,因此无需在其他地方加入或查找信息。

或者,您可以像使用关系数据库一样分成两个集合,然后使用附加查询来获取产品的销售额,如下所示:

SQL:SELECT Sales WHERE ProductId = 123

MongoDB: db.sales.find( { productid: 123 } )

产品

{
    _id: 123,
    name: "Widget",
    price: 9.99
}
Run Code Online (Sandbox Code Playgroud)

销售量

{
    id: 1,
    productid: 123,
    date: "20100316",
    howMany: 2 
}

{
    id: 2,
    productid: 123,
    date: "20100316",
    howMany: 5
}
Run Code Online (Sandbox Code Playgroud)

  • @MaximilianRuta 如果您正在处理大量**关系数据**,那么最好使用 SQL 数据库。例如,Diaspora 正是出于这个原因从 MongoDB 迁移到 MySQL。请参阅 [MongoDB 到 MySQL 的方式和原因,作者:Sarah Mei](https://www.youtube.com/watch?v=OqBAVC9GGeI) (2认同)