数据建模简介(https://docs.mongodb.org/manual/core/data-modeling-introduction/)
一些概念,一个mongod服务可以有建立多个数据库,每个数据库可以有多张表,这里的表名叫collection,每个collection可以存放多个文档(document),这个文档就是一行记录,每个文档都以BSON(binary json)的形式存放于硬盘中,因此可以存储比较复杂的数据类型。
(1)每个文档可以匹配表示实体的数据字段,即使数据有很大的差异。
(2)在实际中,同一集合下的文档通常采用相似的结构。
1、文档结构(Document Structure)
设计MongoDB数据模型的关键是考虑好文档结构和应用程序表示的数据之间的关系。有两种方式可以表达这种关系:引用(references)和嵌入文档(embedded documents)
1、1 引用(References)
引用(References)存储数据之间的关系,包括从一个文档链接或引用到另外一个文档。这样应用程序就解决了访问关联数据的问题,一般来说,这些都是规范数据的数据模型。
1、2嵌入式文档(Embedded Data)
嵌入式文档通过存储相关的数据在一个文档结构中来捕获数据之间的关系。MongoDB文档可以在当前文档的字段或数组中嵌入文档作为子文档。这些非规范化数据模型允许应用程序检索和操作相关的数据在一个单一的数据库操作。
2、写操作的原子性(Atomicity of Write Operations)
2、1 写操作的原子性限制在文档级别,没有一个写操作可以自动影响到多个文档或多个集合
3、文档增加(Document Growth)
像添加元素到数组或者增加新字段这样的更新,会增加文档的大小。如果文档的大小超过了为该文档分配空间,MongoDB会重新分配磁盘空间。考虑到空间的增加,应该规范化或使用规范的数据。
4、数据使用和性能(Data Use and Performance)
当设计数据模型的时候,应考虑应用程序如何使用数据库。比如,如果应用程序仅使用最近插入的文档,考虑使用顶端集合(Capped Collections)。如果应用程序需要频繁的读取集合,添加索引能够提高数据查询效率。
文档验证(Document Validation)
数据建模概念(Data Modeling Concepts)
1、数据模型设计(Data Model Design)
1、1 嵌入式数据模型(Embedded Data Models)
以下情况使用这种模型:
(1) 实体间有包含关系
(2) 实体间一对多(one-many)
优点:读操作性能更高。
缺点:随着文档的增长,影响写的性能,并导致数据碎片;数据重复。
1、2 规范化的数据模型(Normalized Data Models)
引用描述实体间的关系。
一下情况使用这种模型:
(1)嵌入式模型造成的数据重复问题严重,不足以用其的读取优势弥补。
(2)表示更复杂的多对多的关系。(many-to-many)。
(3)模拟大型分层数据集。
数据模型的实例和模式(Data Model Examples and Patterns)
1、文档之间的模型关系(Model Relationships Between Documents)
1、1 一对一的关系和嵌入式(Model One-to-One Relationships with Embedded Documents)
1、2 一对多的关系和嵌入式(Model One-to-Many Relationships with Embedded Documents)
1、3 一对多和应用(Model One-to-Many Relationships with Document References)
出版者和书籍的关系