Elasticsearch进阶笔记第二十三篇

154 阅读3分钟

Elasticsearch高手进阶篇(47)

深入聚合数据分析_易并行聚合算法,三角选择原则,近似聚合算法

画图讲解易并行聚合算法:max

  • 有些聚合分析的算法,是很容易就可以并行的,比如说max image.png

  • 有些聚合分析的算法,是不好并行的,比如说,count(distinct),并不是说,在每个node上,直接就出一些distinct value,就可以的,因为数据可能会很多 image.png

自我理解:

  • 易于并行的数据,以max为例,当我们的请求从候选节点发送到所有的shard上的时候,我们的数据在shard上进行max,并将各个shard上的max数据返回给候选节点,最终在候选节点的部分在对各个shard的max的值进行max操作,得到最大的max搜索数据。
  • 不易于并行的数据,以count(distinct)为例,当我们的请求从候选节点发送到所有的shard上的时候,我们的数据执行去重的操作(假设去完重之后还有100万的数据),并将各个shard上的100万数据返回给候选节点,最终在候选节点有shard * 100万的数据,在对候选节点进行count(distinct)去重,得到最后的去重搜索数据。

es会采取近似聚合的方式,就是采用在每个node上进行近估计的方式,得到最终的结论

  • count(distcint),100万,1050万/95万 --> 5%左右的错误率

  • 近似估计后的结果,不完全准确,但是速度会很快,一般会达到完全精准的算法的性能的数十倍

三角选择原则

精准+实时+大数据 --> 选择2个

  • 精准+实时: 没有大数据,数据量很小,那么一般就是单击跑,随便你则么玩儿就可以
  • 精准+大数据:hadoop,批处理,非实时,可以处理海量数据,保证精准,可能会跑几个小时
  • 大数据+实时:es,不精准,近似估计,可能会有百分之几的错误率

近似聚合算法

  • 如果采取近似估计的算法:延时在100ms左右,0.5%错误
  • 如果采取100%精准的算法:延时一般在5s~几十s,甚至几十分钟,几小时, 0%错误

Elasticsearch高手进阶篇(48)

深入聚合数据分析_cardinality去重算法以及每月销售品牌数量统计

cartinality

  • es,去重cartinality metric,对每个bucket中的指定的field进行去重,取去重后的count,类似于count(distcint)
 GET /waws_tvs/sales/_search
 {
   "size" : 0,
   "aggs" : {
       "months" : {
         "date_histogram": {
           "field": "sold_date",
           "interval": "month"
         },
         "aggs": {
           "distinct_colors" : {
               "cardinality" : {
                 "field" : "brand"
               }
           }
         }
       }
   }
 }
 
 {
   "took": 54,
   "timed_out": false,
   "_shards": {
     "total": 5,
     "successful": 5,
     "failed": 0
   },
   "hits": {
     "total": 8,
     "max_score": 0,
     "hits": []
   },
   "aggregations": {
     "months": {
       "buckets": [
         {
           "key_as_string": "2016-05-01T00:00:00.000Z",
           "key": 1462060800000,
           "doc_count": 1,
           "distinct_colors": {
             "value": 1
           }
         },
         {
           "key_as_string": "2016-06-01T00:00:00.000Z",
           "key": 1464739200000,
           "doc_count": 0,
           "distinct_colors": {
             "value": 0
           }
         },
         {
           "key_as_string": "2016-07-01T00:00:00.000Z",
           "key": 1467331200000,
           "doc_count": 1,
           "distinct_colors": {
             "value": 1
           }
         },
         {
           "key_as_string": "2016-08-01T00:00:00.000Z",
           "key": 1470009600000,
           "doc_count": 1,
           "distinct_colors": {
             "value": 1
           }
         },
         {
           "key_as_string": "2016-09-01T00:00:00.000Z",
           "key": 1472688000000,
           "doc_count": 0,
           "distinct_colors": {
             "value": 0
           }
         },
         {
           "key_as_string": "2016-10-01T00:00:00.000Z",
           "key": 1475280000000,
           "doc_count": 1,
           "distinct_colors": {
             "value": 1
           }
         },
         {
           "key_as_string": "2016-11-01T00:00:00.000Z",
           "key": 1477958400000,
           "doc_count": 2,
           "distinct_colors": {
             "value": 1
           }
         },
         {
           "key_as_string": "2016-12-01T00:00:00.000Z",
           "key": 1480550400000,
           "doc_count": 0,
           "distinct_colors": {
             "value": 0
           }
         },
         {
           "key_as_string": "2017-01-01T00:00:00.000Z",
           "key": 1483228800000,
           "doc_count": 1,
           "distinct_colors": {
             "value": 1
           }
         },
         {
           "key_as_string": "2017-02-01T00:00:00.000Z",
           "key": 1485907200000,
           "doc_count": 1,
           "distinct_colors": {
             "value": 1
           }
         }
       ]
     }
   }
 }