zoukankan      html  css  js  c++  java
  • 58.海量bucket优化机制:从深度优先到广度优先

    buckets数量特别多的时候,深度优先和广度优先的原理,图解

    假如我们有如下数据数据:每个演员的每个电影的评论。

    现在我们的需求是找到前10名的演员所演的电影的评论。这是一个两层聚合题。

       

    查询语句体如下:

    {

    "aggs" : {

    "actors" : {

    "terms" : {

    "field" : "actors",

    "size" : 10,

    "collect_mode" : "breadth_first"

    },

    "aggs" : {

    "costars" : {

    "terms" : {

    "field" : "films",

    "size" : 5

    }

    }

    }

    }

    }

    }

       

    es默认采用广度优先原则:

    这种方式下,先把所有演员所演的电影找出来一一对应,然后再选出前10名的演员,舍弃掉其他的演员的数据。假设有1000个演员,每个演员有10个电影,这是舍弃的就是990*10=9900个数据,而不是990个数据,而且在舍弃数据之前就已经把其余数据聚合好了,这也是一次无用的计算。

    深度优先

    深度优先和广度优先不同,他首先选出10个演员,在选出这10个演员之前,没有经过聚合,这时舍弃的数据只是990条,并且没有经过聚合,然后再在这10个演员中聚合。这样就可以大大的提升性能。

    "collect_mode" : "breadth_first" 表示设置成深度优先。

  • 相关阅读:
    EF--CodeFirst
    一个很吊的文章---框架
    EF的代码优先设计
    MVC3--View层
    asp.net返回值当文件下载问题
    MVC源码
    编译原理
    TPatch动态补丁系统(iOS)
    浅析分布式系统
    如何在腾讯云快速构建一个Wordpress个人站点
  • 原文地址:https://www.cnblogs.com/liuqianli/p/8542107.html
Copyright © 2011-2022 走看看