Elasticsearch学习之深入聚合分析五---案例实战

摘要:
1.字段数据的核心原理:将字段数据加载到内存的过程是延迟加载。只有在汇总分析字段时才会加载。这也是场级加载。将加载索引字段中的所有文档,而不是少数文档。它不是索引时间创建,而是查询时间创建。2.Fielddata内存限制索引s.Fielddata.cache。尺寸:20

1. fielddata核心原理

  fielddata加载到内存的过程是lazy加载的,对一个analzyed field执行聚合时,才会加载,而且是field-level加载的,一个index的一个field,所有doc都会被加载,而不是少数doc,不是index-time创建,是query-time创建

2. fielddata内存限制

  indices.fielddata.cache.size: 20%,超出限制,清除内存已有fielddata数据,fielddata占用的内存超出了这个比例的限制,那么就清除掉内存中已有的fielddata数据,默认无限制,限制内存使用,但是会导致频繁evict和reload,大量IO性能损耗,以及内存碎片和gc

3. 监控fielddata内存使用

GET /_stats/fielddata?fields=*
GET /_nodes/stats/indices/fielddata?fields=*
GET /_nodes/stats/indices/fielddata?level=indices&fields=*

4. circuit breaker

如果一次query load的feilddata超过总内存,就会oom --> 内存溢出

circuit breaker会估算query要加载的fielddata大小,如果超出总内存,就短路,query直接失败

indices.breaker.fielddata.limit:fielddata的内存限制,默认60%
indices.breaker.request.limit:执行聚合的内存限制,默认40%
indices.breaker.total.limit:综合上面两个,限制在70%以内

5. fielddata预加载

如果真的要对分词的field执行聚合,那么每次都在query-time现场生产fielddata并加载到内存中来,速度可能会比较慢

POST /test_index/_mapping/test_type
{
  "properties": {
    "test_field": {
      "type": "string",
      "fielddata": {
        "loading" : "eager" 
      }
    }
  }
}

  query-time的fielddata生成和加载到内存,变为index-time,建立倒排索引的时候,会同步生成fielddata并且加载到内存中来,这样的话,对分词field的聚合性能当然会大幅度增强

6. fielddata 序号标记预加载

global ordinal原理解释

doc1: status1
doc2: status2
doc3: status2
doc4: status1

有很多重复值的情况,会进行global ordinal标记

status1 --> 0
status2 --> 1

doc1: 0
doc2: 1
doc3: 1
doc4: 0

建立的fielddata也会是这个样子的,这样的好处就是减少重复字符串的出现的次数,减少内存的消耗

POST /test_index/_mapping/test_type
{
  "properties": {
    "test_field": {
      "type": "string",
      "fielddata": {
        "loading" : "eager_global_ordinals" 
      }
    }
  }
}

免责声明:文章转载自《Elasticsearch学习之深入聚合分析五---案例实战》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Jfrog Artifactory 创建docker 镜像仓库以及 push 镜像到 该仓库.标准C程序设计七---32下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

推荐:Java性能优化系列集锦

Java性能问题一直困扰着广大程序员,由于平台复杂性,要定位问题,找出其根源确实很难。随着10多年Java平台的改进以及新出现的多核多处理器,Java软件的性能和扩展性已经今非昔比了。现代JVM持续演进,内建了更为成熟的优化技术、运行时技术和垃圾收集器。与此同时,底层的硬件平台和操作系统也在演化。 目录: 一、Java性能优化系列之一--设计优化 二、J...

ElasticSearch 评分排序

背景 通过脚本改变评分 背景 近期有一个需求,需要对优惠券可用商品列表加个排序,只针对面值类的券不包括折扣券。 需求是这样的,假设有一张面值券 50 块钱,可用商品列表 A 100、B 40、C 10,当用户查询当前券可用商品列表的时候优先将卡券可以直接抵扣且不需要用户在额外支付的商品排在前面。 C 10 B 40 A 100 其实排序有很多侧重,比如...

几篇关于MySQL数据同步到Elasticsearch的文章---第二篇:canal 实现Mysql到Elasticsearch实时增量同步

文章转载自:https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484377&idx=1&sn=199bc88f700f427f4515afac4c7402f1&chksm=eaa82bf1dddfa2e7c9f4319b52fc7a5ab721531039b9...

Elasticsearch的基础安装

部署ES 1.服务器时间同步(注意:多台的时候字符集跟时间一定要一致) [root@db01 ~]# yum install -y ntpdate [root@db01 ~]# ntpdate time1.aliyun.com 2.安装java环境 # 上传 [root@db01 ~]# rz jdk-8u181-linux-x64.rpm # 安装...

ES系列二、Mac 通过docker搭建ELK日志收集系统

一、ELK简介 Elasticsearch:用于存储收集到的日志信息; Logstash:用于监控,过滤,收集日志,SpringBoot应用整合了Logstash以后会把日志发送给Logstash, Logstash再把日志转发给Elasticsearch; Kibana:通过Web端的可视化界面来查看日志。 二、解决docker拉取镜像慢的问题...

在Windows系统下搭建ELK日志分析平台

再记录一下elk的搭建,个人觉得挺麻烦的,建议还是在linux系统下搭建,性能会好一些,但我是在windows下搭建的,还是记录一下吧,像我这种记性差的人还是得靠烂笔头 简介: ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成:     Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零...