[NoSQL] 从模型关系看 Mongodb 的选择理由
2023-09-14 09:02:29 时间
往期:Mongodb攻略
回顾 Mongodb 与关系型数据库的对应关系:
MySQL MongoDB
database(数据库) database(数据库)
table(表) collection(集合)
rows(记录) document(文档对象)
建模时的决定直接影响到应用程序的性能和数据的处理能力。
一般来说,下述情况建议使用内嵌数据:
-
数据对象之间有 “contains” (包含) 关系。 参见 一对一关系建模:内嵌文档模型。
-
数据对象之间有一对多的关系。 这些情况下 “多个”或者子文档会经常和父文档一起被显示和查看。请参见 一对多关系建模: 内嵌文档模型。
通常情况下,内嵌数据会对读操作有比较好的性能提高,也可以使应用程序在一个单个操作就可以完成对数据的读取。 同时,内嵌数据也对更新相关数据提供了一个原子性写操作。
当需要访问内嵌的数据时,你可以使用 dot notation 。 欲了解如何访问数组内数据或内嵌文档数据,参见 数组内数据查询 以及 内嵌文档数据查询 。
一般来说,在下述情况下可以使用规范化模型(即范式):
-
当内嵌数据会导致很多数据的重复,并且读性能的优势又不足于盖过数据重复的弊端时候。
-
需要表达比较复杂的多对多关系的时候。
-
大型多层次结构数据集。
引用比内嵌要更加灵活一些。 但客户端应用必须使用二次查询来解析文档内包含的引用。换句话说,对同样的操作来说,规范化模式会导致更多的网络请求发送到数据库服务器端。
小结:
你可以看出,Mongodb 的明显特色是内嵌、无Schema进行存储。那么在多对多关系场景下,SQL 支持原子操作、更适应查询,其它情况下可以考虑用 Mongodb 优化掉二次查询。
这是从模型关系来看 SQL 与 NoSQL 谁更适合,当然 Mongodb 自身其它特性一定更贴近不同应用的场景。
相关文章
- NoSQL文档型存储数据库—MongoDB
- 存储库-MongoDB简单的操作
- MongoDB之集合管理二
- MongoDB的Python客户端PyMongo(转)
- 用MongoDB取代RabbitMQ(转)
- [MongoDB] Query, update, index and group
- MongoDB数据库介绍及安装
- Mongodb 和Redis 的相同点和不同点
- 墨者学院刷题笔记——SQL手工注入漏洞测试(MongoDB数据库)
- MongoDB 入门教程系列之三:使用 Restful API 操作 MongoDB
- Atitit nosql的概念与attilax的理解 目录 1. 常见的nosql 二、Redis,Memcache,MongoDb的特点 1 HBase1 2. Nosql的核心nosql1
- MongoDB和Redis区别
- 左膀mongostat,右臂mongotop——MongoDB的监控之道
- MongoDB全文搜索——目前尚不支持针对特定field的搜索
- NoSQL生态系统——类似Bigtable列存储,或者Dynamo的key存储(kv存储如BDB,结构化存储如redis,文档存储如mongoDB)
- MongoDB数据库运维工具的使用
- mongodb转json
- mongodb 安装和使用