Data Model(数据模型)——MongoDB数据建模简介



  • MongoDB中的数据具有灵活的模式。 与SQL数据库不同,在插入数据之前必须确定并声明表的模式,MongoDB的集合不会强制执行文档结构。 这种灵活性有助于将文档映射到实体或对象。 每个文档可以匹配所表示实体的数据字段,即使数据有实质性变化。 然而,在实践中,集合中的文档共享相似的结构。
    数据建模中的关键挑战是平衡应用程序的需求,数据库引擎的性能特性和数据检索模式。 在设计数据模型时,始终考虑数据的应用程序使用(即查询,更新和数据处理)以及数据本身的固有结构。

    文档结构
    文档的结构以及应用程序如何表示数据之间的关系,是设计MongoDB应用程序数据模型的关键所在。 有两个工具允许应用程序表示这些关系:引用和嵌入式文档。

    • 引用
      引用通过包括从一个文档到另一个文档的链接或引用来存储数据之间的关系。 应用程序可以解析这些引用以访问相关数据。 广义地,这些是规范化的数据模型。
      0_1477382505649_DataMoldel_1.jpg

    • 嵌入式资料
      嵌入式文档通过将关联数据存储在单个文档结构中来捕获数据之间的关系。 MongoDB文档可以在单一文档中的字段或数组中嵌入文档结构。 这些非规范化的数据模型允许应用程序在单个数据库操作中检索和操作关联数据。
      0_1477382695536_DataMoldel_2.jpg

    写操作的原子性
    在MongoDB中,写操作在文档层级是原子的,单个写操作不会影响多个文档或多个集合。以一个结合多个关联数据的嵌入式且非规范化数据模型文档来表达一个实体(Entity)。 这有助于写操作的原子性,因为单个写入操作可以插入或更新实体的数据。 数据正规化会将数据拆分在多个集合中,并且需要多个写入操作,这样的多写入操作并不都是原子性的。
    然而,促进原子写入的模式可能限制应用程序可以使用数据的方式,或者可能限制修改应用程序的方式。 《 Atomicity Considerations》文档描述了设计平衡灵活性和原子性的模式的挑战。

    文档增长
    某些更新(例如将元素推送到数组或添加新字段)会增加文档的大小。
    对于MMAPv1存储引擎,如果文档大小超过该文档的分配空间,MongoDB会在磁盘上重新定位该文档。 当使用MMAPv1存储引擎时,增长的考虑因素可能会影响将数据归一化或非归一化的决策。 有关规划和管理MMAPv1文档增长的更多信息,请参阅文档增长注意事项。

    数据使用和性能
    在设计数据模型时,请考虑应用程序如何使用数据库。 例如,如果您的应用程序只使用最近插入的文档,请考虑使用上限集合。 或者如果您的应用程序主要是对集合的读取操作,则添加索引以支持常见查询可以提高性能。
    有关影响数据模型设计的上述和其他操作注意事项的更多信息,请参阅操作因素和数据模型。


登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待