zoukankan      html  css  js  c++  java
  • Elasticsearch学习之深入聚合分析五---案例实战

    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" 
          }
        }
      }
    }
  • 相关阅读:
    利用递归分割(Split)字符串
    SQL Server2012 T-SQL基础教程--读书笔记(1-4章)
    kindeditor编辑器的使用
    echarts绘制四川地图
    Windows下搭建PHP开发环境(Apache+PHP+MySQL)+调试工具Xdebug的配置
    给搜索关键字添加高亮,加以颜色区分
    SQL 生成6位随机数并MD5加密输出
    微信小程序登录 .net 后端实现
    钉钉小程序http post 请求
    浅谈Web Api配合SignalR的跨域支持
  • 原文地址:https://www.cnblogs.com/sunfie/p/7101779.html
Copyright © 2011-2022 走看看