简单描述:
直接进入了解属性模式。它特别适合以下的情况:

  1. 有一个大的文档,但是它其实拥有一些相似的字段,而且这些字段的一个子集具有相同的特征,最后其实需要对这些子集字段进行排序或者查询;
  2. 实际上也不是所有文档都会出现需要的排序字段;
  3. 或者上述两个条件均满足

事实上考虑到性能方面的原因,为了优化搜索可能需要许多索引才能照顾到这些子集。但是创建越多的索引也只会导致性能的下降。属性模式为这种情况提供了一个很好的解决方案。

实例:
一个订单数据文档,其实是有很多需要记录的时间,比如创建时间,支付时间,发货时间等等。在设计数据结构的时候当然第一时间就会想到如图:

直接结构设计

实际上这种设计在时间类型比较少的情况下是没有太大问题,但是结合了实际业务场景,一张订单的时间当然不会太少,有时候为了优化排序,不得不建立相应的所以,现在问题就来的,根据这么多字段逐个建立索引那可能建立很多,这样反而会降低整体查询的性能。那么这时候使用属性模式就很合适了。如下图:

属性模式结构设计

如果订单数据结构考虑使用了这种模式后,就不需要反复为相似的字段子集建立索引,大大提高查询效率。

结论:
属性模式针对每个文档中许多类似字段提供了更简单的文档索引。通过将这个数据子集移动到一个键值子文档中,我们可以使用不确定的字段名,为信息添加额外的限定符,并更清楚地说明原始字段和值的关系。当我们使用属性模式时,由于需要的索引更少,查询变得更简单更快。


xiyanghui
254 声望18 粉丝

18年程序员,一个懂技术,爱技术的CEO