[NoSQL] 从模型关系看 Mongodb 的选择理由

 

往期:Mongodb攻略

 

回顾 Mongodb 与关系型数据库的对应关系:

  MySQL         MongoDB

  database(数据库)   database(数据库)

  table(表)       collection(集合)

  rows(记录)      document(文档对象)

 

建模时的决定直接影响到应用程序的性能和数据的处理能力。

 

内嵌式数据模型和规范化数据模型的选择。

一般来说,下述情况建议使用内嵌数据:

  • 数据对象之间有 “contains” (包含) 关系。 参见 一对一关系建模:内嵌文档模型。

  • 数据对象之间有一对多的关系。 这些情况下 “多个”或者子文档会经常和父文档一起被显示和查看。请参见 一对多关系建模: 内嵌文档模型。

通常情况下,内嵌数据会对读操作有比较好的性能提高,也可以使应用程序在一个单个操作就可以完成对数据的读取。 同时,内嵌数据也对更新相关数据提供了一个原子性写操作。

当需要访问内嵌的数据时,你可以使用 dot notation 。 欲了解如何访问数组内数据或内嵌文档数据,参见 数组内数据查询 以及 内嵌文档数据查询 。

 

一般来说,在下述情况下可以使用规范化模型:

  • 当内嵌数据会导致很多数据的重复,并且读性能的优势又不足于盖过数据重复的弊端时候。

  • 需要表达比较复杂的多对多关系的时候。

  • 大型多层次结构数据集。

 关于引用的例子,参见  一对多关系建模: 文档引用模式 。关于使用引用的树结构模型的例子,参见  树结构建模。

 

引用比内嵌要更加灵活一些。 但客户端应用必须使用二次查询来解析文档内包含的引用。换句话说,对同样的操作来说,规范化模式会导致更多的网络请求发送到数据库服务器端。 

 

经验:MongoDB数据库设计中6条重要的经验法则。

 

小结:

你可以看出,Mongodb 的明显特色是内嵌、无Schema进行存储。那么在多对多关系场景下,SQL 支持原子操作、更适应查询,其它情况下可以考虑用 Mongodb 优化掉二次查询。

这是从模型关系来看 SQL 与 NoSQL 谁更适合,当然 Mongodb 自身其它特性一定更特近不同应用的场景。

 

EnDoc:https://docs.mongodb.com/manual/tutorial/model-referenced-one-to-many-relationships-between-documents/

CnDoc:http://www.mongoing.com/docs/tutorial/model-referenced-one-to-many-relationships-between-documents.html

Link:https://www.cnblogs.com/farwish/p/12131313.html

你可能感兴趣的:([NoSQL] 从模型关系看 Mongodb 的选择理由)