我是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"
哪种情况对性能有好处?
答案 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的性能会更好。