MongoDB:数据模型介绍

在MongoDB的数据有灵活的模式。不像SQL数据库,(SQL数据库)要求你必须在插入数据之前决定和声明一个表的模式,MongoDB的集合不强制文档的结构。这个灵活性有利于文档到实体或对象的映射。每个文档可以匹配所要表示实体的数据字段,即使数据的变化很显著。但在实际操作中,一个集合的文档共享一个相似的结构。

数据模型的关键挑战在于平衡应用的需要,数据库引擎的性能和数据存取模式。当设计数据模型时,要考虑数据在应用里的使用情况(如,查询、更新和处理数据),以及数据本身的内在结构。

文档结构

在为MongoDB应用设计数据模型时的关键是围绕文档的结构和应用时如何表示数据间的联系。有两个工具来允许应用来表示这些关系:引用和嵌入文档( references and embedded documents)。

  • 引用

引用通过包括连接或一个文档到另一个文档间的引用存储着数据间的关系。应用能够解析这些引用来访问到相关数据。广义上说,这些都是归一化的数据模型(normalized data models).

上图的数据模型使用引用来联系文档。contract文档和access文档都保护着user文档的引用。

下面介绍归一化数据模型在使用引用的优缺点:

归一化模型使用引用描述文档间的关系。一般地,使用归一化模型的情况有,

  1. 当嵌入会导致数据重复且不会提供有效的读性能。
  2. 表示更复杂的多对多的关系
  3. 对大型分级数据建模

引用比嵌入式文档的灵活性更大。但客户端应用必须处理引用带来的查询问题。总之,归一化数据模型需要更多的往返服务器。

  • 嵌入数据

嵌入式文档通过在一个单一文档结构里存储相关数据来捕获数据间的关系。MongoDB的文档使在一个文档里的一个字段或字段数据嵌入一个文档作为子文档具体可能性。这些非规范化数据使得应用可以在一个单一数据库操作力获取和操纵数据。

上图的数据模型就是嵌入式字段保护所有的相关信息。

下面讨论嵌入子文档的数据模型的优缺点:

使用MongoDB,你可以在一个单一结构或文档嵌入相关数据。这个模型是著名的“非规范化”模型,利用了MongoDB丰富文档的优势。

嵌入数据模型允许应用在相同的数据库记录里存储相关片段信息。因此,应用在完成一个常规操作时,只需处理很少的查询或更新。

一般,当下面情形时可使用嵌入数据模型:

  1. 实体间有“包含关系”
  2. 实体间有一对多的关系。在这些关系里,“多“或子文档经常被看做"一"或父文档的上下文里

一般来说,嵌入提供了更好的读性能,以及在单一数据库操作里请求和获取相关数据的能力。嵌入数据模型使得在哪一个原子操作里更新相关数据成为可能。

然而,在一个文档的嵌入数据模型可能导致文档创建后的增长。文档的增长会影响写性能并导致数据碎片问题。并且,在MongoDB里的文档大小必须小于最大的BSON文档大小。对大型二进制数据,考虑GridFS。

写操作的原子性

在MongoDB,写操作在文档这一级是原子的,并且没有单一的写操作能原子性的影响多个文档或集合。一个有嵌入数据的非规范化数据模型在一个单一文档里包含了能表示一个实体的相关数据。这有利于写操作的原子性,因为单一的写操作能直接对一个实体插入或更新数据。规范化数据会在多个集合里分散了数据,这会要求多次写操作,因此不是原子性的。

然而,有利于原子性写的模式会限制一个应用使用数据的方法或修改数据的方法。因此需要平衡原子性和平衡性。

文档增长

有的更新,比如向数组添加元素或添加新的字段,会增大文档的大小。如果文档的大小超过了给该文档分配的空间,MongoDB会重新定位这个文档。文档的增长会影响规范化和非规范化数据的选择。

数据使用和性能

当设计一个文档模型,要考虑应用将如何使用你的数据库。比如,如果你的应用仅使用最近插入的数据,考虑使用 Capped Collections.或者,你的应用需要总是读操作,添加索引是常见的提升性能的办法。

MongoDB:数据模型介绍,布布扣,bubuko.com

时间: 2025-01-01 22:01:58

MongoDB:数据模型介绍的相关文章

第二课 MongoDB 数据模型

1.课程大纲 本课程主要介绍MongoDB数据模型相关知识.包含文档.集合与数据库的基本概念.用法及命名规则:MongoDB主要的数据类型介绍以及MongoDB Shell的简单介绍与使用. 文档 (Document) 与 集合 MongoDB 数据类型 MongoDB Shell简单介绍与使用 2.课程简单介绍 本课时将解说 MongoDB 数据类型,首先会对 MongoDB 数据类型做一个简单介绍.然后会对当中几个比較重要的同一时候也是我们在实际项目中常常使用到的数据类型做一个具体介绍,这些

MongoDB数据模型和索引学习总结

MongoDB数据模型和索引学习总结 1. MongoDB数据模型: MongoDB数据存储结构: MongoDB针对文档(大文件採用GridFS协议)採用BSON(binary json,採用二进制编码)数据格式来存储和交换数据.Bson吸收了JSON schema-less的特点,存储结构松散,不须要像RDB(关系数据)那样事先定义数据存储的元数据结构.另外添加了多种数据类型的支持和优化,使读写更加高效. (1) BSON 支持的数据类型: Double.String.Object.Arra

MongoDB 教程介绍

MongoDB教程介绍 什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成.MongoDB 文档类似于 JSON 对象.字段值可以包含其他文档,数组及文档数组. [那些技术]MongoDB介绍主要特点· MongoDB的提供了一个面向

MongoDb 数据库介绍、安装、使用

1.数据库和文件的主要区别 1. 数据库有数据库表.行和列的概念,让我们存储操作数据更方便 2. 数据库提供了非常方便的接口,可以让 nodejs.php java .net 很方便的实现增加修改删 除功能. 2.NoSql 介绍 2.1 NoSQL 介绍 由于互联网的迅速发展,云计算与 Web2.0.这样大量的交互给数据库提出了更高的性能要 求,传统的数据库(本文泛指 SQL 数据库),即关系数据库虽然具备良好的事物管理,但在处理 大量数据的应用时很难在性能上满足设计要求.NoSQL 就是主要

【一步步学习MongoDB】——MongoDB简单介绍(一)

上篇博文我们大话了一下,什么是NoSQL.我们对NoSQL有了一个全面的认识,从这篇博文开始,将带领大家走入MongoDB的世界,下面我们开始介绍MongoDB. 什么是MongoDB? 我们直接看MongoDB官网的最权威解释:MongoDB (from "humongous") is an open-source document database, and the leading NoSQL database. Written in C++. 翻译:MongoDB的名字来自于&q

【Monogdb】MongoDB的介绍以及同类数据库的对比

前期已经写了大约50余篇关于Mongodb数据库学习的博客,现在重新其他数据,把不全面的地方补充一下:今天补充的内容是Mongodb数据库是神马东东以及同类数据库中为什么它能脱颖而出: 一.基本介绍 Mongodb是一个高性能.开源.无模式的文档型数据库,使用C++开发,是当前Nosql数据库产品中最热门的一种.这 里说到nosql数据库,就简单描述一下什么是nosql. nosql(not only sql非关系型数据库)的主要特点是非关系型的.分布式.开源的.水平扩展的.nosql的原始目的

MongoDB数据模型(三)

六.数据模型引用 文档 我们已经知道MongoDB以文档的形式存储数据,而文档是JSON风格的数据结构,由一系列的“字段名-值”对组成,如下所示 { "item": "pencil", "qty": 500, "type": "no.2" } 大多用户可访问的数据结构是文档,这些文档可以表示很多含义,包括: 所有数据库记录. 查询选择器,定义选择什么样的记录用以读取.更新和删除操作. 更新定义,定义需要修改

MongoDB数据模型(二)

原文地址 接上一篇 四.模型树结构 父引用的模型树结构 这个数据模型描述了一个树形结构,在子节点中存储父节点的引用. 模式 父引用模式存储每个树节点到文档中,除了树节点外,文档还存储了父节点的id. 考虑以下目录的层级关系. 以下为应用实例 db.categories.insert( { _id: "MongoDB", parent: "Databases" } ) db.categories.insert( { _id: "dbm", pare

MongoDB数据模型

MongoDB中的数据有一个灵活的模式.不像SQL数据库,你必须确定在插入数据之前和声明一个表的模式, MongoDB的集合不执行文档结构.他灵活便利的映射文件一个实体或对象.每个文档可以匹配的数据字段代表的实体, 即使数据有实质性的变化.然而在实践中,集合中的文件共享一个相似的结构.数据建模的关键挑战是平衡应用程序 的需要,数据库引擎的性能特征,数据检索模式.在设计数据模型时,总是考虑应用程序使用的数据(如查询.更新和处 理的数据)以及数据本身固有的结构. 文档结构 MongoDB应用程序的数