[NoSQL] 从模型关系看 Mongodb 的选择理由
往期:Mongodb攻略
回顾 Mongodb 与关系型数据库的对应关系:
MySQL MongoDB
database(数据库) database(数据库)
table(表) collection(集合)
rows(记录) document(文档对象)
建模时的决定直接影响到应用程序的性能和数据的处理能力。
一般来说,下述情况建议使用内嵌数据:
数据对象之间有 “contains” (包含) 关系。 参见 一对一关系建模:内嵌文档模型。
数据对象之间有一对多的关系。 这些情况下 “多个”或者子文档会经常和父文档一起被显示和查看。请参见 一对多关系建模: 内嵌文档模型。
通常情况下,内嵌数据会对读操作有比较好的性能提高,也可以使应用程序在一个单个操作就可以完成对数据的读取。 同时,内嵌数据也对更新相关数据提供了一个原子性写操作。
当需要访问内嵌的数据时,你可以使用 dot notation 。 欲了解如何访问数组内数据或内嵌文档数据,参见 数组内数据查询 以及 内嵌文档数据查询 。
一般来说,在下述情况下可以使用规范化模型:
当内嵌数据会导致很多数据的重复,并且读性能的优势又不足于盖过数据重复的弊端时候。
需要表达比较复杂的多对多关系的时候。
大型多层次结构数据集。
关于引用的例子,参见 一对多关系建模: 文档引用模式 。关于使用引用的树结构模型的例子,参见 树结构建模。
小结:
你可以看出,Mongodb 的明显特色是内嵌、无Schema进行存储。那么在多对多关系场景下,SQL 支持原子操作、更适应查询,其它情况下可以考虑用 Mongodb 优化掉二次查询。
这是从模型关系来看 SQL 与 NoSQL 谁更适合,当然 Mongodb 自身其它特性一定更特近不同应用的场景。
Link:https://www.cnblogs.com/farwish/p/12131313.html
[NoSQL] 从模型关系看 Mongodb 的选择理由的更多相关文章
- NoSql非关系型数据库之MongoDB应用(二):安装MongoDB可视化工具
业精于勤,荒于嬉:行成于思,毁于随. 我们上次说到NoSql非关系型数据库之MongoDB应用(一):安装MongoDB服务 这次我们介绍安装 NoSQL Manager for MongoDB 可 ...
- Laravel 5.1 文档攻略 —— Eloquent:模型关系
简介 其实大家都知道,数据表之间都是可以关联的,前面讲过了,Eloquent ORM是数据模型操作代替表操作,那么表的关联查询,在Eloquent这里也就是模型间的关联查询,这就是本章的主要内容: E ...
- 转载 NoSQL | Redis、Memcache、MongoDB特点、区别以及应用场景
NoSQL | Redis.Memcache.MongoDB特点.区别以及应用场景 2017-12-12 康哥 码神联盟 本篇文章主要介绍Nosql的一些东西,以及Nosql中比较火的三个数据库Red ...
- NoSql非关系型数据库之MongoDB应用(三):MongoDB在项目中的初步应用
业精于勤,荒于嬉:行成于思,毁于随. 我们可以结合相关的IDE做一个简单的增删改查了,实现MongoDB在项目中的初步应用. 前提是安装了MongoDB服务和MongoDB可视化工具,没有安装的可以点 ...
- django 模型关系
模型关系 关系数据库的威力体现在表之间的相互关联,Django提供了三种最常见的数据库关系:多对一 (many-to-one),多对多(many-to-many),一对一(one-to-one) 多对 ...
- NoSQL发展简史、粗略分类及选择
这里对近来看的部分NoSQL资料做一个汇总记录,主要包括简史.粗略分类及数据库选择的考虑事项.NoSQL常见的解释是“non-relational”,有时也称作Not Only SQL. 1. ...
- [你必须知道的NOSQL系列]专题一:MongoDB快速入门
一.前言 现在越来越多的公司开始采用非关系数据库了,并且很多公司的面试都要求面试者有MongoDB的使用经验,至于非关系数据库与关系型数据库之间的区别大家可以自行百度.但是作为程序员的我们,既然大部分 ...
- NOSQL学习笔记系列之MongoDB 一 基础
主题:MongoDB 学习资料参考网址: 1.http://www.w3cschool.cc/mongodb/mongodb-tutorial.html 2.http://www.icoolxue.c ...
- App创业者必看:如何选择免费数据分析平台
笔者是一位移动互联网老兵,做过好几个App的开发运营工作,其中一些如今侥幸有了上亿用户.今天和大家聊一下App开发中,不能缺少的一个工具——数据分析系统 首先,App创业者为什么需要一个数据分析系 ...
随机推荐
- oracle函数 SYS_CONTEXT(c1,c2)
[功能]返回系统c1对应的c2的值.可以使用在SQL/PLSQL中,但不可以用在并行查询或者RAC环境中 [参数] c1,'USERENV' c2,参数表,详见示例 [返回]字符串 [示例] sele ...
- <肖申克的救赎>观后感
肖申克的救赎主要讲述了银行家安迪在不健全的法律制度下被陷害进入了--鲨堡监狱,最后为了重见光明.追求自由,实现“自我救赎”的故事. 1.希望是件好东西,也许是世上最好的东西.好东西从来不会流逝. Ho ...
- Redis源码解析:01简单动态字符串SDS
Redis没有直接使用C字符串(以'\0'结尾的字符数组),而是构建了一种名为简单动态字符串( simple dynamic string, SDS)的抽象类型,并将SDS用作Redis的默认字符 ...
- css white-space属性
css white-space属性 规定段落中的文本不进行换行
- http header详解,HTTP头、请求头、响应头、实体头
Content-Language,Content-Length,Content-Type,Content-Encoding,mime分析 Accept 指定客户端能够接收的内容类型 Accept:te ...
- Linux 内核设备驱动
设备模型跟踪所有对系统已知的驱动. 这个跟踪的主要原因是使驱动核心能匹配驱动和新 设备. 一旦驱动在系统中是已知的对象, 但是, 许多其他的事情变得有可能. 设备驱动可 输出和任何特定设备无关的信息和 ...
- mysql修改数据库密码
方法1: 运行MySQL 5.7 Command Line Client,输入老的密码: use mysql: update user set authentication_string=passwo ...
- 【record】#10
反正最近就一直在1600分左右徘徊;好想回蓝名啊
- IntPtr、Struct 相互转换
一般写c#代码基本用不到 相互转换 只有调用c++中的dll动态库的时候才用的到 struct转intptr public static IntPtr StructToIntPtr<T>( ...
- Oracle生成批量清空表数据脚本
select 'DELETE FROM ' || a.table_name || '; --' || a.comments from user_tab_comments a where a.table ...