首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用模式构建:属性模式

Alger 译者:牟天磊 欢迎回到MongoDB模式设计系列。上一次我们研究了多态模式,它涵盖了集合中所有文档具有相似但不相同结构的情况。在本文中,我们将了解一下属性模式。...属性模式为这种情况提供了一个很好的解决方案。 属性模式 假设现在有一个关于电影的集合。其中所有文档中可能都有类似的字段:标题、导演、制片人、演员等等。...一个资产管理领域的客户最近使用属性模式部署了他们的解决方案。客户使用该模式存储给定资产的所有特征。这些特征在资产中很少常见,或者在设计时很难预见到。...如果应用程序和数据访问模式依赖于需要同时搜索这些不同字段,那么属性模式为数据提供了一个良好的结构。 结论 属性模式针对每个文档中许多类似字段提供了更简单的文档索引。...当我们使用属性模式时,由于需要的索引更少,查询变得更简单更快。 我们将讨论的下一个模式是桶模式(Bucket Pattern)。 ? /译者简介 / 牟天垒: 野生程序员一枚。

88910
您找到你想要的搜索结果了吗?
是的
没有找到

使用模式构建:树形模式

到目前为止,我们讨论的许多设计模式都强调省去JOIN操作的时间是有好处的。那些会被一起访问的数据也应该存储在一起,即便导致了一些数据重复也是可以的。...这里我们就可以使用树形模式。 树形模式 在以前的表格式数据库中,有许多方法可以表示一个树。最常见的是,让图中的每个节点列出其父节点,还有一种是让每个节点列出其子节点。...这两种表示方式可能都需要多次访问来构建出节点链。 ? 由父节点构建的公司架构 ? 由子节点构建的公司架构 还有一种做法,我们可以将一个节点到层级顶部的完整路径储存起来。...应用场景示例 产品目录是另一个使用树形模式的好例子。产品通常属于某个类别,而这个类别是其它类别的一部分。...结论 在使用对于许多模式时,通常需要在易用性和性能之间进行权衡。对于树形模式来说,它通过避免多次连接操作可以获得更好的性能,但是你需要自己管理图的更新。

1.2K30

使用模式构建:子集模式

另一种选择是减小工作集的大小,这就是我们可以利用子集模式的地方。 子集模式模式用来解决工作集超出RAM,从而导致信息从内存中被删除的问题。...应用场景示例 当我们的文档拥有大量数据而其并不常用时,子集模式就非常有用。产品评论、文章评论、电影中的演员信息都是这个模式的应用场景案例。...每当文档大小对工作集的大小产生压力并导致工作集超过计算机的RAM容量时,子集模式便成为一个可以考虑的选项。 结论 通过使用包含有频繁访问数据的较小文档,我们减少了工作集的总体大小。...在使用子集模式时必须做的一个权衡是,我们必须管理子集,而且如果我们需要引入更旧的评论或所有信息,则需要额外的数据库访问才能做到这一点。

69230

使用模式构建:桶模式

关注MongoDB中文用户组学习更多关于MongoDB的知识和技能 欢迎回到MongoDB模式设计系列。上一次我们研究了属性模式,在本文中,我们将了解一下桶模式。...桶模式 随着数据在一段时间内持续流入(时间序列数据),我们可能倾向于将每个测量值存储在自己的文档中。然而,这种倾向是一种非常偏向于关系型数据处理的方式。...通过将桶模式应用于数据模型,我们可以在节省索引大小、简化潜在的查询以及在文档中使用预聚合数据的能力等方面获得一些收益。获取上面的数据流并对其应用桶模式,我们可以得到: ?...其它一些例子还包括在银行的金融程序中使用这种模式将交易进行分组。 结论 处理时间序列数据时,在MongoDB中使用桶模式是一个很好的选择。...桶模式在许多情况下都非常有效,但是如果我们的数据中有异常值呢?这就是我们要讨论的下一个模式——异常值设计模式(Outlier Design Pattern)的作用所在。 译者 ?

75320

使用模式构建:计算模式

在MongoDB中文社区学习更多关于MongoDB的知识和技能 我们已经在使用模式构建系列研究了各种优化存储数据的方法。现在,我们从另一个角度来看看模式设计。通常,仅仅存储数据并使其可用还不够。...计算模式 当有在应用程序中需要重复计算的数据时,我们可以使用计算模式。...当数据访问模式为读取密集型时,也会使用计算模式;例如,如果每小时有1000000次读取而只有1000次写入,则在写入时进行计算会使计算次数减少1000倍。 ?...应用场景示例 只要有对数据进行计算的需求,就可以使用计算模式。一个很好的例子是需要求和的数据集(如收入或观影者),但时间序列数据、产品目录、单视图应用程序和事件源也同样很适合这种模式。...当你的系统在重复执行相同的计算,并且具有较高的读写比时,请考虑使用计算模式。 我们已经完成了使用模式构建这个系列的三分之一了。

46920

使用模式构建:属性模式

Alger 译者:牟天磊 欢迎回到MongoDB模式设计系列。上一次我们研究了多态模式,它涵盖了集合中所有文档具有相似但不相同结构的情况。在本文中,我们将了解一下属性模式。...属性模式为这种情况提供了一个很好的解决方案。 属性模式 假设现在有一个关于电影的集合。其中所有文档中可能都有类似的字段:标题、导演、制片人、演员等等。...一个资产管理领域的客户最近使用属性模式部署了他们的解决方案。客户使用该模式存储给定资产的所有特征。这些特征在资产中很少常见,或者在设计时很难预见到。...如果应用程序和数据访问模式依赖于需要同时搜索这些不同字段,那么属性模式为数据提供了一个良好的结构。 结论 属性模式针对每个文档中许多类似字段提供了更简单的文档索引。...当我们使用属性模式时,由于需要的索引更少,查询变得更简单更快。 我们将讨论的下一个模式是桶模式(Bucket Pattern)。 ? / 译者简介 / 牟天垒: 野生程序员一枚。

71020

使用模式构建模式版本控制模式

模式版本控制模式 这一模式的实现相对容易。我们的应用程序最初会使用一种模式,而这个模式最终会需要修改。当这种情况发生时,我们可以使用schema_version字段创建新模式并将其保存到数据库中。...在阅读了使用模式构建系列文章之后,我们了解了属性模式,并将其实现到一个contact_method数组中。为此,我们创建了一个新的模式版本。...从应用的角度来看,可以设计成同时读取模式的两个版本。即使涉及的应用服务器不止一个,应用程序对于如何处理模式差异的更改也是不需要停机的。...所有这些都会帮助减少未来的技术债务,这是这个模式的另一大优势。 与本系列中提到的其它模式一样,使用模式版本控制模式也需要一些考量。...在本例中,将模式版本控制和属性模式一起使用,允许在不停机的情况下进行模式升级,这使得模式版本控制这一模式在MongoDB中特别强大。

1.2K30

使用模式构建:扩展引用模式

贯穿整个《使用模式构建》,我希望你已经了解到一件事,即模式是什么样子取决于数据的访问方式。如果我们有许多相似的字段,属性模式可能是一个很好的选择。...也许异常值模式是值得考虑的。还有一些模式,例如子集模式,会引用额外的集合,并依赖JOIN操作将每个数据块重新组合在一起。如果需要大量的JOIN操作来聚集那些需要频繁访问的数据,这时要怎么办呢?...这就是我们可以使用扩展引用模式的地方。 扩展引用模式 有时将数据放置在一个单独的集合中是有道理的。如果一个实体可以被认为是一个单独的“事物”,那么使其拥有单独的集合通常是有意义的。...扩展引用模式提供了一种很好的方法来处理这类情况。我们只复制经常访问的字段,而不是复制全部的客户信息。...但是请注意,重复数据是这种设计模式的一个副作用。

64170

使用模式构建:异常值模式

在MongoDB中文社区学习更多关于MongoDB的知识和技能 到目前为止,在《使用模式构建》系列中,我们已经研究了多态模式、属性模式和桶模式。...其中,尽管文档的模式略有不同,但从应用程序和查询的角度来看,文档的结构基本上是一致的。然而,如果情况并非如此会怎么样?当有数据不属于“正常”模式时会发生什么?如果有异常值怎么办?...应用场景示例 异常模式是一种高级模式, 但可以带来较大的性能改进。它经常在受欢迎程度可以作为一个因素的情况下使用,例如社交网络关系、图书销售、电影评论等。...通过为典型的文档或查询定制模式,应用程序的性能将会针对那些正常的用例进行优化,而那些异常值仍将得到处理。 这个模式需要考虑的一点是,它通常是为特定的查询和情况而定制的。...在我们的下一篇《使用模式构建》中,我们将了解计算模式(Computed Pattern)以及如何为那些可能会导致不必要资源浪费的应用程序进行模式优化。 译者 ? 牟天垒 野生程序员一枚。

59630

使用模式构建:多态模式(The Polymorphic Pattern)

所有这些以及更多的问题,都涉及到如何在MongoDB中设计数据库模式(schema)。有人说MongoDB是无模式的,而实际上模式设计在MongoDB中非常重要。...在本系列文章“使用模式构建”中,我们将了解在MongoDB中行之有效的十二种常见的模式设计方式(Schema Design Patterns)。...利用这些模式(patterns)可以在模式(schema)规划中使用“构建基块(building blocks)”,从而使这个过程更多地成为一种方法论而不是艺术。 MongoDB使用文档数据模型。...灵活性也可能导致模式比它们应有样子的更复杂。在考虑模式设计时,我们应该考虑性能、可伸缩性和简单性。 让我们开始探索模式设计时先看一下被认为是所有模式基础的模式——多态模式。...而将这些不同的系统合并到一个统一的SQL模式中是一项既昂贵又费时的工作。 Metlife能够在几个月内利用MongoDB和多态模式构建他们的单一视图应用程序。

1.1K20

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

随着MMAPv1在MongoDB 4.0中的弃用,预分配模式似乎失去了一些吸引力和必要性。然而,仍然会有一些用例需要WiredTiger的预分配模式。...与我们在《使用模式构建》系列中讨论的其它模式一样,有一些涉及到应用程序的事项需要考虑。 预分配模式 这个模式只要求创建一个初始的空结构,稍后再进行填充。...和其它模式一样,你需要在“简单”和“性能”之间做出权衡。 本系列的下一篇文章将介绍文档版本控制模式(Document Versioning Pattern)。...译者:牟天垒 往期回顾 利用模式进行构建第一讲——多态模式 利用模式进行构建第二讲——属性模式 利用模式进行构建第三讲——桶模式 利用模式进行构建第四讲——异常值模式 利用模式进行构建第五讲——计算模式...利用模式进行构建第六讲——子集模式 利用模式进行构建第七讲——扩展引用模式 利用模式进行构建第八讲——近似值模式 利用模式进行构建第九讲——树形模式

77620

使用模式构建:近似值模式

近似值模式 在所需要的计算非常有挑战性或消耗的资源昂贵(时间、内存、CPU周期)时,如果精度不是首要考虑因素时,那么我们就可以使用近似值模式。再回顾一下人口问题,精确计算这个数字的成本是多少?...从应用程序的角度看,我们可以构建一个近似因子,它允许对数据库进行更少写入的同时仍然提供统计上有效的数字。...我们可以构建一个计数器,只在每达到100的时候才去更新数据库,这样只用原来1%的时间。在这个例子里,我们的写操作显著减少了99%。还有一种做法是创建一个返回随机数的函数。...应用场景示例 人口统计的方式是近似值模式的一个示例。另一个可以应用此模式的用例是网站视图。一般来说,知道访问过该网站的人数是700,000还是699,983并不重要。...因此,我们可以在应用程序中构建一个计数器,并在满足阈值时再更新数据库。 这可能会极大地降低网站的性能。

42430

使用模式构建:多态模式(The Polymorphic Pattern)

所有这些以及更多的问题,都涉及到如何在MongoDB中设计数据库模式(schema)。有人说MongoDB是无模式的,而实际上模式设计在MongoDB中非常重要。...在本系列文章“使用模式构建”中,我们将了解在MongoDB中行之有效的十二种常见的模式设计方式(Schema Design Patterns)。...利用这些模式(patterns)可以在模式(schema)规划中使用“构建基块(building blocks)”,从而使这个过程更多地成为一种方法论而不是艺术。 MongoDB使用文档数据模型。...灵活性也可能导致模式比它们应有样子的更复杂。在考虑模式设计时,我们应该考虑性能、可伸缩性和简单性。 让我们开始探索模式设计时先看一下被认为是所有模式基础的模式——多态模式。...而将这些不同的系统合并到一个统一的SQL模式中是一项既昂贵又费时的工作。 Metlife能够在几个月内利用MongoDB和多态模式构建他们的单一视图应用程序。

1.1K20

使用模式构建:文档版本控制模式

这就是我们可以使用文档版本控制模式的地方。 这个模式的关键是保持文档的版本历史记录处于可用状态。我们可以构建一个专用的版本控制系统和MongoDB配合使用。...此外,这种模式对数据库的总体写入量会更高。这就是为什么使用此模式的要求之一是数据的更改不会太频繁。 结论 当你需要跟踪文档的更改时,文档版本控制模式是一个很好的选择。...本系列的下一篇文章将介绍最后一个模式模式版本控制(Document Versioning)。...往期回顾 使用模式构建第一讲——多态模式 使用模式构建第二讲——属性模式 使用模式构建第三讲——桶模式 使用模式构建第四讲——异常值模式 使用模式构建第五讲——计算模式 使用模式构建第六讲——子集模式...使用模式构建第七讲——扩展引用模式 使用模式构建第八讲——近似值模式 使用模式构建第九讲——树形模式 使用模式构建第十讲——预分配模式 译者 ?

1K20

结构型构建模式

适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式,它们是关注类和对象的组合为目的的设计模式,它们也被称为结构型构建模式。...其中代理模式之前已经介绍过,可以查看往期内容: 代理模式 Proxy Pattern 适配器模式 Adapter Pattern Adapter Pattern 是 Java 中常见的设计模式,它提供了一种将类...装饰器模式 Decorator Pattern Decorator Pattern 是 Java 中常见的设计模式,它提供了一种不改变原有类结构的情况下,为原有类增加新功能的能力。...桥接模式 Bridge Pattern Bridge Pattern 是 Java 中常见的设计模式,它提供了一种将抽象与实现两者解耦的能力。 一个简单演示 ?...总结 以上,通过一些简单的演示案例,展示了结构型构建模式的使用方法。

38920

使用模式构建系列总结

现在到了我们总结使用模式构建系列的时候,这是一个很好的机会回顾一下这个系列涵盖的模式所解决的问题,并着重复习每个模式所具有的一些好处以及做出的权衡。...如何设计应用程序的数据模式非常依赖于数据访问的方式。 ? 设计模式总结 近似值 近似值模式适用于当昂贵的计算很频繁,而这些计算的精度要求通常不是首要考虑的时候。...优点 • 实现简单 • 查询可以在单个集合中运行 模式版本控制 几乎每个应用程序都可以从模式版本控制模式中获益,因为数据模式的更改经常发生在应用程序的生命周期中。...这种灵活性是非常强大的,但是这种能力需要根据应用程序的数据访问模式去驾驭利用。MongoDB中的模式设计对应用程序的性能有着巨大的影响。我们发现性能问题常常可以追溯到糟糕的模式设计。...请记住,为了进一步增强文档模型的能力,这些设计模式在合理的情况下可以一起使用。例如,随着应用程序的发展,模式版本控制可以与任何其它模式一起使用。

54920
领券