mongoDB和MySQL中的产品/类别管理

时间:2013-11-20 08:17:54

标签: mysql mongodb

我是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})

我想找Product Category名为Motor的{​​{1}},我必须编写树查询:

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中:

案例a:

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"

哪种情况对性能有好处?

2 个答案:

答案 0 :(得分:0)

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

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

在您的情况下,MongoDB没有优势,因为类别和产品是固定的。

This slide可以帮到你。

有很多争论'应该使用'v.s. '不使用'MongoDB。如果你想要改编MongoDB,需要深入搜索mongodb。

已更新

哪种情况对性能有好处?

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

答案 1 :(得分:0)

mongodb的优势将根据您的要求进行描绘。在您的情况下,要显示带有类别名称的产品,您必须在两个表之间进行连接,这将会产生一些性能影响。在mongodb的情况下,你可以有一个文件调用产品,你将在其中嵌入类别。像这样的东西

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

现在只需一个查询即可获得产品及其类别。即使您可以搜索

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

您将通过一个查询获得所有产品。如果您在“类别”中有更多详细信息,请在产品系列中保留一些您经常使用产品展示的详细信息,同时我们将为“类别集合”提供详细信息。

即使在产品的所有文档中重复了类别名称和id等数据,你也可以自己弄明白,使用这种模式设计,mongodb的性能会更好。