在 MongoDB 的应用时,我们必定要忘记很多 RDBMS 中对于表设计的规矩,同时想清跋扈 MongoDB 的优势,细心思虑若何对表进行设计才能应用 MongoDB 供给的诸独特点晋升萌芽的效力。
数据模型
MongoDB 与 RDBMS 之间最大年夜的不合,就是数据模型的设计有着异常明显的差别,数据模型的不合决定了它有着异常不合的特点,存储在 MongoDB 中的数据有着异常灵活的 Schema,我们不须要像 RDBMS 一样,在插入数据之前就决定并且定义表中的数据构造,MongoDB 的结合纰谬 Collection 的数据构造进行任何限制,然则在实际应用中,同一个 Collection 中的大年夜多半文档都具有类似的构造。
在为 MongoDB 应用设计数据模型时,若何表示数据模型之间的关系其实是须要开辟者须要细心推敲的,MongoDB 为表示文档之间的关系供给了两种不合的办法:引用和嵌入。
标准化数据模型
引用(Reference)在 MongoDB 中被称为标准化的数据模型,它与 MySQL 的外键异常类似,每一个文档都可以经由过程一个 xx_id 的字段『链接』到其他的文档:
MongoDB 中的引用处不会对引用对应的数据模型是否真正存在做出任何的束缚,所以如不雅在应用层级没有对文档之间的关系有所束缚,那么就可能会出现引用了指向不存在的文档的问题:
固然引用有着比较严重的机能问题并且在数据库层面没有对模型是否被删除加上限制,不过它供给的一些特点是嵌入式的文档无法赐与了,当我们须要表示多对多关系或者加倍宏大年夜的数据集时,就可以推敲应用标准化的数据模型 — 引用了。
嵌入式数据模型
除了与 MySQL 中异常类似的引用,MongoDB 因为其独特的数据存储方法,还供给了嵌入式的数据模型,嵌入式的数据模型也被认为是不标准的数据模型:
因为 MongoDB 应用 BSON 的数据格局对数据进行存储,而嵌入式数据模型中的子文档其实就是父文档中的另一个值,只是个中存储的是一个对象:
- {
- _id: <ObjectId1>,
- username: "draveness",
- age: 20,
- contact: [
- {
- _id: <ObjectId2>,
- email: "i@draveness.me"
- }
- ]
- }
嵌入式的数据模型许可我们将有雷同的关系的信息存储在同一个数据记录中,如许应用就可以更快地对相干的数据进行萌芽和更新了;当我们的数据模型中有『包含』如许的关系或者模型经常须要与其他模型一路出现(萌芽)时,好交手章和评论,那么就可以推敲应用嵌入式的关系对数据模型进行设计。
总而言之,嵌入的应用让我们在更少的请求中获得更多的相干数据,可以或许为读操作供给更高的机能,也为在同一个写请求中同时更新相干数据供给了支撑。
MongoDB 底层的 WiredTiger 存储引擎可以或许包管对于同一个文档的操作都是原子的,随便率性一?写操作都不克不及原子性地影响多个文档或者多个集合。
推荐阅读
年薪40万的程序员为啥找不到女朋友?这是我见过最精彩的回答!
今天看到一位题主问了一个问题:年薪40万的法度榜样员为什么找不到女同伙!哈,问题不出色评论出色,来和小编一路看看你吧我熟悉的男法度榜样员,大年夜多集技艺与逗比于一身,读得了《边>>>详细阅读
地址:http://www.17bianji.com/lsqh/37233.html
1/2 1