使用模式构建系列总结

在MongoDB University
学习更多关于MongoDB的知识和技能程序员

如今到了咱们总结使用模式构建系列的时候,这是一个很好的机会回顾一下这个系列涵盖的模式所解决的问题,并着重复习每一个模式所具备的一些好处以及作出的权衡。关于模式设计,最多见的问题是“我正在设计一个要作某某事情的应用程序,如何对数据建模?”正如咱们但愿你在学习本系列过程当中能够体会到的那样,要回答这个问题,须要考虑不少事情。不过咱们提供了一个应用场景示例图,这至少有助于为通用的数据建模提供一些初级的指导。数据库

应用场景示例设计模式

下图是咱们在与客户合做多年后发现的用于各类应用程序中设计模式的指导原则。对于哪一种设计模式能够用于某类特定的应用程序不是“一成不变”的。你须要仔细查看用例中常用的那些,可是不要忽略其它的,它们可能仍然适用。如何设计应用程序的数据模式很是依赖于数据访问的方式。分布式

设计模式总结工具

近似值性能

近似值模式适用于当昂贵的计算很频繁,而这些计算的精度要求一般不是首要考虑的时候。学习

优势
• 对数据库更少的写入
• 保持在统计学上有效的数字
缺点
• 没法展现精确的数字
• 须要在应用层实现优化

属性设计

属性模式适用于解决这样一类问题:咱们有一些大文档,它们有不少类似的字段,而这些字段的一个子集具备共同的特征,咱们但愿对该子集字段进行排序或查询。当须要排序的字段只能在一小部分文档中找到。或者在文档中同时知足这两个条件时。3d

优势
• 须要更少的索引
• 查询变得更容易编写,并且一般更快

分桶

当须要管理流式数据,如时间序列、实时分析或物联网(IOT)应用程序时,分桶模式是一个很好的解决方案。

优势
• 减小了集合中的文档总数
• 提升了索引性能
• 能够经过预聚合简化数据的访问

计算

当数据访问模式为读取密集型而且应用程序须要重复计算这些数据时,计算模式是一个很好的选项。

优势
• 对于频繁的计算能够减小CPU的工做负载
• 查询变得更容易编写,并且一般更快
缺点
• 识别出须要使用此模式的的场景可能比较困难
• 除非必要,请勿过分使用此模式

文档版本控制

当你须要在MongoDB中维护之前版本的文档时,文档版本控制模式是一种可行的解决方案。

优势
• 容易实现,即便是在现存的系统中
• 在最新版本上进行请求时,没有性能上的影响
缺点
• 写操做的数量会翻倍
• 请求须要被定位到正确的集合

扩展引用

当你的应用程序使用了大量的JOIN操做来将频繁访问的数据集中在一块儿时,你会发现扩展引用模式很是有用。

优势
• 当有大量的JOIN操做时能够提高性能
• 读操做会更快,而且能够减小JOIN操做的数量
缺点
• 会有重复数据

异常值

你是否发现有一些查询或文档和其它典型数据的模式不同?这些例外状况是否驱动了你应用程序的解决方案?若是是这样,那么异常值模式就是解决这种状况的一个很好的方法。

优势
• 防止整个应用的解决方案被某些个别的文档或请求所左右
• 请求会针对那些典型的用例进行优化,而异常值仍将获得处理
缺点
• 一般会为特定的查询而进行定制,所以一些临时产生的查询可能性能不太理想
• 此模式的大部分工做是在应用程序代码中完成的

预分配

当你事先知道文档的结构,而应用程序只须要用数据填充它时,预分配模式是正确的选择。

优势
• 当预先知道文档结构时,能够简化设计
缺点
• 简单和性能之间的权衡

多态

当有多种文档它们的类似性比差别更多,而且须要将这些文档保存在同一个集合中时,多态模式是一种解决方案。

优势
• 实现简单
• 查询能够在单个集合中运行

模式版本控制

几乎每一个应用程序均可以从模式版本控制模式中获益,由于数据模式的更改常常发生在应用程序的生命周期中。此模式容许历史版本和当前版本的文档在集合中同时存在。

优势
• 不须要停机时间
• 模式迁移可控
• 减小将来的技术债务
缺点
• 在迁移过程当中,对相同的字段可能须要两个索引

子集

子集模式解决了有大量数据的大文档没有被应用程序使用而致使的工做集超过RAM容量的问题。

优势
• 在整体上减少了工做集的大小
• 缩短了最经常使用数据的磁盘访问时间
缺点
• 必须管理子集
• 请求附加的数据须要额外的数据库访问

树形

当数据是分层结构而且常常被查询时,树形模式就是你要使用的。

优势
• 经过避免屡次JOIN操做提升了性能
缺点
• 须要在应用层管理图的更新

结论

正如咱们但愿你在本系列文章中看到的,MongoDB文档模型在如何建模数据方面提供了很大的灵活性。这种灵活性是很是强大的,可是这种能力须要根据应用程序的数据访问模式去驾驭利用。MongoDB中的模式设计对应用程序的性能有着巨大的影响。咱们发现性能问题经常能够追溯到糟糕的模式设计。

请记住,为了进一步加强文档模型的能力,这些设计模式在合理的状况下能够一块儿使用。例如,随着应用程序的发展,模式版本控制能够与任何其它模式一块儿使用。学习完已经介绍的十二种设计模式,你已经拥有了利用文档模型强大的灵活性所需的工具和知识。

精彩内容

利用模式进行构建第一讲——多态模式

利用模式进行构建第二讲——属性模式

利用模式进行构建第三讲——桶模式

利用模式进行构建第四讲——异常值模式

利用模式进行构建第五讲——计算模式

利用模式进行构建第六讲——子集模式

利用模式进行构建第七讲——扩展引用模式

利用模式进行构建第八讲——近似值模式

利用模式进行构建第九讲——树形模式

利用模式进行构建第十讲——预分配模式

利用模式进行构建第十一讲——文档版本控制模式

译者:牟天垒

野生程序员一枚。

长期关注分布式系统及通用型数据库技术。

相关文章
相关标签/搜索