开发者社区> 问答> 正文

关于MongoDB数据库的疑问

问题一:是否collection越少越好,尽量把关系数据库中分表表示的关系嵌套进文档里?
问题二:如果这样的话,一句SQL能搞定的复杂查询,mongodb也许要查询多次。mongodb的查询速度是否还比sql数据库快?
问题三:那mongodb的优势体现在哪?超大规模数据的mapreduce?方便拓展?
我来举个栗子吧:
假设mysql中是这样的(意思意思):
screenshot
那么MongoDB中就可能是这个样子:
•只有一个authors collection
screenshot
问题来了,如果我要单独查出所有作者的文章,并按浏览量来排序,要如何做?
•于是有了第二种设计方法,这也是nosql = not only sql的体现。有authors和articles两个collection
screenshot
现在的问题是,如果我要把文章和作者的名字一起返回要怎么办?

  1. 是不是要查两次,连两次?如果连一次的话,有一些paas是不支持的(比如说bae,亲测不支持)。这样是否有失优雅?
  2. 如果在article里存一份author.name的话,当某个作者改了名字,文章显示的作者名将无法更新,如果硬要一起更新,开销是否太大?
  3. DBRef何时用比较合适?在这里,要怎么用?

在这里栗子中,总结一下我们需要的东西:
•所有作者旗下的文章可以全部聚合返回,并按某种方式排序
•文章可以和与之匹配的作者名一起返回
•作者可以编辑自己的资料
•文章和作者都可以单独插入
可能比较啰嗦,大家谅解。
要是有人能总结一下mongodb数据库设计的一些原则就更好了

展开
收起
蛮大人123 2016-02-14 11:27:56 2551 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    mongodb不是rdbms。你尽可以随意发起任何select类型查询。比如

    for ($i=0,$j<100000000;$i<$j;$i++)
        $author = $mongo->getCollection('db','table')->findOne(array('author_id'=>id),array('author_name'=>1));
        echo $author['author_name'];

    mysql,这样你就是疯了。mongodb,这样,很好。
    你要根本的观念上认为:mongodb是绝对有别于MySQL的。
    当然,不可否认的是,查询越少越好-

    2019-07-17 18:42:31
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Data as a Service - 数据即服务 -- MongoDB⾼级应⽤模式 立即下载
阿里云MongoDB云服务构建 立即下载
饿了么高级架构师陈东明:MongoDB是如何逐步提高可靠性的 立即下载