【问题标题】:Product/ Category management in mongoDB and MySQLmongoDB 和 MySQL 中的产品/类别管理
【发布时间】:2013-11-20 08:17:54
【问题描述】:

我是 mongoDB 的新手。我编写了一个简单的应用程序来管理产品。我使用 mongoDB。这是我的数据库

Category收藏:

db.category.insert({id:1,name:"Motor",description:"Sell Motor"})
db.category.insert({id:2,name:"Car":description:"Sell Car"})

Product收藏:

db.product.insert({id:1,name:"Honda CBR",price:15000,id_category:1})
db.product.insert({id:2,name:"Kawasaki ",price:16000,id_category:1})
db.product.insert({id:3,name:"Ford", price:50000,id_category:2})

我想找到ProductCategory 名字是Motor,我必须写树查询:

var result =  db.category.find({name:"Motor"})
var cat = result.next().id
db.product.find({id_category:cat})

在 MySQL 中,我可以用两个表做同样的事情:

CREATE TABLE `product_manage`.`category`(  
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(2000),
`description` VARCHAR(2000),
PRIMARY KEY (`id`)
);

CREATE TABLE `product_manage`.`product`(  
`id` INT NOT NULL,
`name` VARCHAR(2000),
`price` INT,
`id_category` INT,
PRIMARY KEY (`id`)
);

所以我不知道在这个例子中 MongoDB 比 MySQL 有什么优势。 我想问更多:

在mysql中:

案例一:

select id into @id_cat where name="Motor"
select * from product where id_category = @id_cat

案例b:

select p.id,p.name,p.price from product p,category where p.id_category = category.id
and category.name = "Motor"

哪种情况对性能好?

【问题讨论】:

标签: mysql mongodb


【解决方案1】:

mongodb 的优势将根据您的要求来描绘。在您的情况下,要显示具有类别名称的产品,您必须在两个表之间进行连接,这会对性能产生一些影响。在 mongodb 的情况下,您可以拥有一个名为 Product 的文档,您将在其中嵌入 Category。像这样的

   {Id : 1 , "Name" : "hello mongodb" , Category : { "Id" : 1 , "Name" : "DB }}

现在只需一次查询,您就可以获得产品及其类别。甚至你也可以像

这样搜索子文档
          db.Collection.find({ Category.Id : 1 })

您将通过一次查询获得所有产品。如果您在 Category 中有更多详细信息,请在 Product 集合中保留一些您经常与 Product 一起显示的详细信息,同时我们将拥有 Category Collection 以及详细信息。

你可以自己弄清楚,即使产品的所有文档中都重复了category name和id之类的数据,这种schema设计在mongodb中的性能会更好。

【讨论】:

  • 感谢@Devesh,如果Category 有很多值,比如Description 是长文本。我认为将类别嵌入产品不是一个好方法!
  • @user2693571 这一切都取决于,在这种情况下,有更多详细信息的类别集合,但保留产品集合中的一些详细信息,您也经常在产品中显示这些细节。这都是关于您的查询
【解决方案2】:

MongoDB 是一个Document DB,文档可以是任何有效的 json。这是 MongoDB 的优势。

但是,MySQL 是Relational DB。关系表示表(具有固定架构)

在你的例子中,MongoDB 没有 MySQL 的优势,因为类别和产品是固定的。

This slide可以帮到你。

有很多争论“应该使用”v.s. '不使用' MongoDB。如果你打算适配MongoDB,需要对mongodb进行深度搜索。

更新

哪种情况对性能好?

这取决于您的数据大小和分片策略。抱歉,您的问题没有确切的答案。您需要建立自己的测试平台并进行性能测试!

【讨论】:

  • 谢谢,这是预期的答案!
猜你喜欢
  • 2021-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-08
相关资源
最近更新 更多