問題一:是否collection越少越好,盡量把關系數(shù)據(jù)庫中分表表示的關系嵌套進文檔里?問題二:如果這樣的話,一句SQL能搞定的復雜查詢,mongodb也許要查詢多次。mongodb的查詢速度是否還比sql數(shù)據(jù)庫快?問題三:那mongodb的優(yōu)勢體現(xiàn)在哪?超大規(guī)模數(shù)據(jù)的mapreduce?方便拓展?我來舉個栗子吧:假設mysql中是這樣的(意思意思):authors(intid,charname,intage,charemail)articles(intid,chartitle,charcontent,longviewCount,intauthor_id)那么MongoDB中就可能是這個樣子:只有一個authorscollectionauthor{_id:newObectID("blublublu"),name:'portwatcher',age:'19',email:'root@pwhack.me',articles:[{title:'youguess',content:'Iamcontent',viewCount:52345},...]}問題來了,如果我要單獨查出所有作者的文章,并按瀏覽量來排序,要如何做?于是有了第二種設計方法,這也是nosql=notonlysql的體現(xiàn)。有authors和articles兩個collectionauthor{_id:newObectID("blublublu"),name:'portwatcher',age:'19',email:'root@pwhack.me'}article{_id:newObjectID("lalalala"),title:'youguess',content:'Iamcontent',viewCount:52345,author_id:'blublublu'}現(xiàn)在的問題是,如果我要把文章和作者的名字一起返回要怎么辦?1.是不是要查兩次,連兩次?如果連一次的話,有一些paas是不支持的(比如說bae,親測不支持)。這樣是否有失優(yōu)雅?2.如果在article里存一份author.name的話,當某個作者改了名字,文章顯示的作者名將無法更新,如果硬要一起更新,開銷是否太大?3.DBRef何時用比較合適?在這里,要怎么用?在這里栗子中,總結一下我們需要的東西:所有作者旗下的文章可以全部聚合返回,并按某種方式排序文章可以和與之匹配的作者名一起返回作者可以編輯自己的資料文章和作者都可以單獨插入可能比較啰嗦,大家諒解。要是有人能總結一下mongodb數(shù)據(jù)庫設計的一些原則就更好了~
有關MongoDB數(shù)據(jù)庫設計的問題
狐的傳說
2019-04-08 11:17:33