有关MongoDB数据库设计的问题
问题一:是否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数据库设计的问题相关推荐
- MongoDB数据库设计中6条重要的经验法则
Part 1 原文:6 Rules of Thumb for MongoDB Schema Design: Part 1 By William Zola, Lead Technical Support ...
- MongoDB数据库设计(一)
"我有丰富的sql使用经验,但是我是个MongoDB的初学者.我应该如何在MongoDB中针对一对多关系进行建模?"这是我被问及最多的问题之一. 我没法简单的给出答案,因为这有很多 ...
- MongoDB数据库设计中6条重要的经验法则(一)
"我有丰富的sql使用经验,但是我是个MongoDB的初学者.我应该如何在MongoDB中针对一对多关系进行建模?"这是我被问及最多的问题之一. 我没法简单的给出答案,因为这有很多 ...
- MongoDB数据库设计法则
Part 1 By William Zola, Lead Technical Support Engineer at MongoDB "我有丰富的sql使用经验,但是我是个MongoDB的初 ...
- MongoDB数据库设计中6条重要经验法则 Part 2
在上一部分中介绍了三种基本的设计方案:内嵌,子引用,父引用,同时说明了在选择方案时需要考虑的两个关键因素. 1. 一对多中的多是否需要一个单独的实体. 2. 这个关系中集合的规模是一对 ...
- MongoDB数据库设计备忘
1.sex存为01还是男女? 存为01主要是为了国际化和节省存储空间.存为01很容易转换成不同语言表示的男女. 2.文件存储方案 MongoDB有GirdFS用来将文件直接保存到数据库,如果使用ngi ...
- 用MongoDB数据库来管理办公系统中文档型的表单和信息——通用流程化应用审批单设计思路(二,续)
1.办公系统中文档的定义 办公系统中的文档就是指对数据不敏感的业务,例如流程中的审批单.信息专栏.数据上报.信息记录等.而对于这些信息的管理,特别是时效性较强的管理记录,仍采用关系型数据库进行管理. ...
- 【大数据存储技术】实验2:MongoDB数据库的部署和操作
目录 1.实现MongoDB单实例的部署 1.1 安装MongoDB(Ubuntu版本:22.04 LTS) 1.1.1 查看Ubuntu版本 1.1.2 使用Ubuntu命令安装 1.2 启动Mon ...
- Mongodb数据库中修改器$push和$addToSet的相同点和不同点
Mongodb数据库中修改器$push和$addToSet的相同点和不同点 对于Mongodb数据库而言,数据的修改会牵扯到内容的变更,结构的变更(数组的变更),所以Mongodb数据库设计的时候就提 ...
最新文章
- Spring Cloud(二) 配置Eureka Client
- web前端分享:性能优化之文档碎片处理
- leecode - 入门 -- 双指针秒杀数组/链表题目
- 动态的顺序表(C语言实现)
- .NET 漫淡(一) --- 需要充分认识的应用程序域-AppDomain
- 直播评论发弹幕切图功能点集合
- 惠普HP Laser 108a 打印机驱动
- java中滚动字幕做法_四种滚动字幕的方法
- php做教务系统管理,基于PHP-MYSQL技术的网络教务管理系统设计
- 计算机网络课制作双绞线实验,计算机网络实验报告(双绞线).doc
- 先少谈点人工智能好吗?
- 暴力搜索---新技能get
- 大数据与云计算概论2
- selenium与js联动实现页面定位及删除页面元素的操作问题
- 电脑亮度无法调节?所有方法都试过了?
- 什么是HSS?HSS有什么主要功能?HSS与HLR的区别是什么
- Doom/Quake射击游戏引擎
- 小目标的检测算法PGan
- Egg 1. 快速开始 Quick Start 1.3 一步步 Step by Step 1.3.6 添加扩展 ~ 1.4 结论
- 这种文件别打开,大小不足1KB,却可以让你电脑瘫痪
热门文章
- mongocollection java_mongodb与java的整合
- python 进度条程序_Python:显示程序运行进度条
- python怎么装饰_如何理解python装饰器
- python【力扣LeetCode算法题库】—两数之和
- c++ main函数调用 类中的枚举_为啥用枚举,枚举有哪些用法?
- PHP文件在线检测病毒,VIRSCAN 在线病毒检测客户端
- c++中报错预处理器指令后有意外标记 - 应输入换行符
- 网络营销推广软件浅析外链怎么做才更“香”,才能促进网站自然有首页排名?...
- 滴滴出行首次进军非洲市场,网络推广外包后的滴滴想去的国家还有很多
- 企业网络推广——浅析企业网络推广怎样看待企业网站的制作