mongodb哪些情况适用内嵌,哪些情况适用引用
在 SQL 中,我们经常会提起:一对一,一对多,多对多,而在 MongoDB 这样的数据库中,我们可以分为新的类型:少和多,之后我们会根据少和多进行一些数据库设计的详细分析,先来简单根据之前的介绍引用一下《MongoDB 权威指南》中的表格:
更适合内嵌 | 更适合引用 |
---|---|
子文档较小 | 子文档较大 |
数据不会定期改变 | 数据经常改变 |
最终数据一致即可 | 中间阶段的数据必须一致 |
文档数据小幅增加 | 文档数据大幅增加 |
数据通常需要执行二次查询才能获得 | 数据通常不包含在结果中 |
快速读取 | 快速写入 |
通常来说,「少」的关系对于内嵌更为合适,「多」则对于引用更加合适:比如文章和标签的关系可能是多对少,文章和评论的关系可能是一(少)对多。
所以我们的 Tags 可以内嵌,而评论则使用引用更好。
由于 MongoDB 的文档会自动扩充大小,如果太过频繁的让 MongoDB 产生文档移动,将会造成性能问题,在设计阶段,可以预留足够的空间,提高写入速度。
mongodb哪些情况适用内嵌,哪些情况适用引用相关推荐
- MongoDB进阶-内嵌文档查询
作为非关系型数据库中的佼佼者,MongoDB一大优势在于能够在一条文档中存储对象类型的数据,适当增加冗余来让数据库更好用.文档中一个对象类型的字段在MongoDB中被称为内嵌文档(Embedded), ...
- MongoDB操作内嵌文档
作为非关系型数据库中的佼佼者,MongoDB一大优势在于能够在一条文档中存储对象类型的数据,适当增加冗余来让数据库更好用.文档中一个对象类型的字段在MongoDB中被称为内嵌文档(Embedded) ...
- 给妹子讲python-S01E19解析Python内嵌作用域与函数闭包
欢迎关注公众号:python数据科学家 [要点抢先看] 1.python中独特的嵌套函数 2.嵌套作用域与闭包现象 3.nonlocal关键字与内嵌作用域变量修改 前情回顾,上一节我们介绍了变量的LE ...
- 针对于iosAPP内嵌H5,-webit-overflow-scrolling:touch;产生空白情况
问题描述:一个内嵌IOSAPP的H5页面,长页面,大概1.6个屏幕高度,由于有列表滑动起来很不流畅,所以用了-webit-overflow-scrolling:touch;这个只针对ios端的物理滚动 ...
- Android内嵌H5,安卓手机返回键点击无反应、苹果手机返回键正常情况解决方案
定义一个返回APP的方法函数如下: function backForApp(delta = 1) {if (getCurrentPages().length > 1) {uni.navigate ...
- KVM虚拟机内无agent情况下的监控方法
KVM虚拟机内无agent情况下的监控(ceilometer实现) 今天看到大家在群里讨论KVM虚拟机的监控问题,而且是要求VM内无agent情况下的监控.这方面确实没有深入研究,但尚有些openst ...
- 【知识小课堂】 mongodb 之字段中的【 数组】、【内嵌文档】
一.介绍 MONGODB 的表结构 很灵活 .主要还是因为 字段中可以包含 [ 数组].[内嵌文档]. 现在简单介绍一下 字段中的[ 数组].[内嵌文档]相关的一些操作 (为了方便理解,还是以表来理解 ...
- mongodb查询内嵌文档
mongodb查询内嵌文档 假设有这样一个文档: db.XXX.remove(); db.XXX.insert({"id":1, "members":[{&qu ...
- python字典导入mongodb_Python语言生成内嵌式字典(dict)-案例从python提取内嵌json写入mongodb...
本文主要向大家介绍了Python语言生成内嵌式字典(dict)-案例从python提取内嵌json写入mongodb,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 从mongo查 ...
最新文章
- 历史上最伟大的方程 (托尼·赖斯 著)
- python【蓝桥杯vip练习题库】ALGO-201大等于n的最小完全平方数
- Redis的两种持久化方式
- 从C#到TypeScript - Generator
- Python基础入门_5面向对象基础
- 在EI中查找某作者的会议论文是否被收录
- Bookmarklet
- 树莓派的使用(一、安装系统)
- 【BZOJ2460】元素,线性基+贪心
- 【Elasticsearch】Elasticsearch:聚合 操作
- Qt4_使用SAX读取XML
- miui怎么用第三方图标包_小米用户必备,不能错过的免费MIUI主题
- 在vue项目中使用阿里巴巴矢量图标库
- 设计模式六大原则(3):里氏替换原则
- Keil5使用AC6编译器
- 双目是个词吗_描写眼睛的词语3个字
- [Office] WPS Excel通过添加宏实现多张表格合并
- 实战详解Maven部署(deploy)jar到私有仓库Nexus及如何引入私仓jar包
- 张一鸣这条微博,就……有点害人不浅
- 怎么申请电子邮箱?电子邮箱号码如何申请?
热门文章
- [css] 请举例说明css有哪些不可继承的属性?
- [css] 使用rem布局时怎样合理设置根标签字体大小?
- [css] 你们团队中css的class命名采用的是什么方式呢?下划线还是横线还是驼峰?
- 工作311:uni-携带当前参数跳转页面传值
- 前端学习(2864):简单秒杀系统学习之优化js
- [js] 手写一个trim()的方法
- “睡服”面试官系列第八篇之iterator(建议收藏学习)
- 前台关于跨域的警告A cookie associated with a cross-site resource at .........,代理服务器
- ES6之Module 的加载实现(1)
- Python基础入门_5面向对象基础