问题一:是否collection越少越好,尽量把关系数据库中分表表示的关系嵌套进文档里?
问题二:如果这样的话,一句SQL能搞定的复杂查询,mongodb也许要查询多次。mongodb的查询速度是否还比sql数据库快?
问题三:那mongodb的优势体现在哪?超大规模数据的mapreduce?方便拓展?

我来举个栗子吧:

假设mysql中是这样的(意思意思):

authors (int id,char name,int age,char email
)articles (int id,char title,char content,long viewCount,int author_id
)

  

那么MongoDB中就可能是这个样子:

只有一个authors collection

    author {_id: new ObectID("blublublu"),name: 'portwatcher',age: '19',email: 'root@pwhack.me',articles: [{title: 'you guess',content: 'I am content',viewCount: 52345}, ...]}

  

问题来了,如果我要单独查出所有作者的文章,并按浏览量来排序,要如何做?

  • 于是有了第二种设计方法,这也是nosql = not only sql的体现。有authors和articles两个collection
    author {_id: new ObectID("blublublu"),name: 'portwatcher',age: '19',email: 'root@pwhack.me'}article {_id: new ObjectID("lalalala"),title: 'you guess',content: 'I am content',viewCount: 52345,author_id: 'blublublu'}

  

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

在这里例子中,总结一下我们需要的东西:

  • 所有作者旗下的文章可以全部聚合返回,并按某种方式排序
  • 文章可以和与之匹配的作者名一起返回
  • 作者可以编辑自己的资料
  • 文章和作者都可以单独插入

可能比较啰嗦,大家谅解。

要是有人能总结一下mongodb数据库设计的一些原则就更好了~

转载于:https://www.cnblogs.com/game-life/p/4489471.html

有关MongoDB数据库设计的问题相关推荐

  1. MongoDB数据库设计中6条重要的经验法则

    Part 1 原文:6 Rules of Thumb for MongoDB Schema Design: Part 1 By William Zola, Lead Technical Support ...

  2. MongoDB数据库设计(一)

    "我有丰富的sql使用经验,但是我是个MongoDB的初学者.我应该如何在MongoDB中针对一对多关系进行建模?"这是我被问及最多的问题之一. 我没法简单的给出答案,因为这有很多 ...

  3. MongoDB数据库设计中6条重要的经验法则(一)

    "我有丰富的sql使用经验,但是我是个MongoDB的初学者.我应该如何在MongoDB中针对一对多关系进行建模?"这是我被问及最多的问题之一. 我没法简单的给出答案,因为这有很多 ...

  4. MongoDB数据库设计法则

    Part 1 By William Zola, Lead Technical Support Engineer at MongoDB "我有丰富的sql使用经验,但是我是个MongoDB的初 ...

  5. MongoDB数据库设计中6条重要经验法则 Part 2

    在上一部分中介绍了三种基本的设计方案:内嵌,子引用,父引用,同时说明了在选择方案时需要考虑的两个关键因素. 1.     一对多中的多是否需要一个单独的实体. 2.     这个关系中集合的规模是一对 ...

  6. MongoDB数据库设计备忘

    1.sex存为01还是男女? 存为01主要是为了国际化和节省存储空间.存为01很容易转换成不同语言表示的男女. 2.文件存储方案 MongoDB有GirdFS用来将文件直接保存到数据库,如果使用ngi ...

  7. 用MongoDB数据库来管理办公系统中文档型的表单和信息——通用流程化应用审批单设计思路(二,续)

    1.办公系统中文档的定义 办公系统中的文档就是指对数据不敏感的业务,例如流程中的审批单.信息专栏.数据上报.信息记录等.而对于这些信息的管理,特别是时效性较强的管理记录,仍采用关系型数据库进行管理. ...

  8. 【大数据存储技术】实验2:MongoDB数据库的部署和操作

    目录 1.实现MongoDB单实例的部署 1.1 安装MongoDB(Ubuntu版本:22.04 LTS) 1.1.1 查看Ubuntu版本 1.1.2 使用Ubuntu命令安装 1.2 启动Mon ...

  9. Mongodb数据库中修改器$push和$addToSet的相同点和不同点

    Mongodb数据库中修改器$push和$addToSet的相同点和不同点 对于Mongodb数据库而言,数据的修改会牵扯到内容的变更,结构的变更(数组的变更),所以Mongodb数据库设计的时候就提 ...

最新文章

  1. Spring Cloud(二) 配置Eureka Client
  2. web前端分享:性能优化之文档碎片处理
  3. leecode - 入门 -- 双指针秒杀数组/链表题目
  4. 动态的顺序表(C语言实现)
  5. .NET 漫淡(一) --- 需要充分认识的应用程序域-AppDomain
  6. 直播评论发弹幕切图功能点集合
  7. 惠普HP Laser 108a 打印机驱动
  8. java中滚动字幕做法_四种滚动字幕的方法
  9. php做教务系统管理,基于PHP-MYSQL技术的网络教务管理系统设计
  10. 计算机网络课制作双绞线实验,计算机网络实验报告(双绞线).doc
  11. 先少谈点人工智能好吗?
  12. 暴力搜索---新技能get
  13. 大数据与云计算概论2
  14. selenium与js联动实现页面定位及删除页面元素的操作问题
  15. 电脑亮度无法调节?所有方法都试过了?
  16. 什么是HSS?HSS有什么主要功能?HSS与HLR的区别是什么
  17. Doom/Quake射击游戏引擎
  18. 小目标的检测算法PGan
  19. Egg 1. 快速开始 Quick Start 1.3 一步步 Step by Step 1.3.6 添加扩展 ~ 1.4 结论
  20. 这种文件别打开,大小不足1KB,却可以让你电脑瘫痪

热门文章

  1. mongocollection java_mongodb与java的整合
  2. python 进度条程序_Python:显示程序运行进度条
  3. python怎么装饰_如何理解python装饰器
  4. python【力扣LeetCode算法题库】—两数之和
  5. c++ main函数调用 类中的枚举_为啥用枚举,枚举有哪些用法?
  6. PHP文件在线检测病毒,VIRSCAN 在线病毒检测客户端
  7. c++中报错预处理器指令后有意外标记 - 应输入换行符
  8. 网络营销推广软件浅析外链怎么做才更“香”,才能促进网站自然有首页排名?...
  9. 滴滴出行首次进军非洲市场,网络推广外包后的滴滴想去的国家还有很多
  10. 企业网络推广——浅析企业网络推广怎样看待企业网站的制作