• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

ES 查询和写入优化

武飞扬头像
君莫笑_0808
帮助1

一、ES调优手段

1.1 设计阶段调优

ES数据区分热、温、冷三个阶段
ES索引按月滚动生成
mapping设置合理的数据类型是否需要分词
使用别名管理索引???

 1.2 数据写入优化

1> 单条写入改为多条数据写入
2> 自动生成ID
3> 索引刷盘时间,index.refresh_interval: 30s; 默认1s改为30s,减少刷盘频次
4> 大批量数据导入时,可以把副本分片设置为0
5> 设置segment段大小,参数如下:
        indices.memory.index_buffer_size: 20% (最大堆内存百分比)
        indices.memory.min_index_buffer_size: 96mb (最小缓存大小)

6> 设置节点之间的故障检测配置,例如以下elasticsearch.yml配置:
discovery.zen.fd.ping_timeout: 120s
discovery.zen.fd.ping_retries: 6
discovery.zen.fd.ping_interval: 30s

1.3 查询优化

1.3.1 分片数合理评估

1> 集群总分片数建议控制在5w以内,单个索引的规模控制在 1TB 以内,单个分片大小控制在30 ~ 50GB ,docs数控制在10亿内,如果超过建议滚动;(预估就就是分片数最好小于20)
2> 分片的数量通常建议小于或等于ES 的数据节点数量,最大不超过总节点数的2倍,通过增加分片数可以提升并发;
3> 分片数越多长尾效应越明显,并不是越多越好,在搜索场景合理控制分片数也可以提升性能。

 1.3.2 mapping设计

1> 合理设置 index:false(是否可索引),store:false(是否存储),doc_values:false (是否倒排)
2> 长字段增加序列化和高亮开销,但字段长度不能高于65536(short?),超长配置: ignore_above 忽略超长的数据。
3> 合理设置keyword类型,使用倒排索引。
4> 合理使用fields属性,对于text字段设置子字段为keyword,支持text和keyword两种功能。
"city": {"type":"text","fields":{"raw":{"type":"keyword"}}}
"sort": {"city.raw": "asc"}
5> 字段爆炸:

         1) 父层级设置 enabled:false 防止子字段mapping,能被行存查出来

        2) dynamic=runtime 入新字段也会更新 mapping,但是新加入的字段不会被索引,dynamic=strict 不允许新增一个不在 mapping中的字段,dynamic=false  (新字段不会被索引,不能作为查询条件,但是能被行存查询出来)。

3、查询 Routing 路由优化?
4、查询裁剪

        1>索引裁剪:如果已经滚动产生了很多索引,这个时候每次通过别名查询全量索引时,一样会有大量空转查询,可以通过索引名特征或时间范围,指定具体的索引名 进行查询

5、fetch性能优化

1、字段设置40个,stored,docvalues,source 三种数据性能相同
        1) 当字段数很少时,低于 40 时,使用 doc_value Fields 拉取,性能最优。
            分析:如果我们只需要返回其中包含的一小部分字段时,读取并解压这个巨大的_source字段可能会开销很高。
        2) 当字段超较多时,达到 40 以上时,使用 _source 变为最优。
            分析:当我们需要非常多或者几乎全部字段时,此时使用 doc_value Fields 可能会有非常多的随机IO。这个时候,读取 _source 一个字段就能够处理全部业务字段。
        学新通

         设置示例:"properties" : {"_source":{"enabled":false//是否启用source}"field":{"type":"keyword","store":true,//是否存储原始值在storefields中"doc_values"true//是否存储原始值在docvalues中}"excludes":["meta.description","meta.other.*"]}
    2、内部结构
        Stored fields 在磁盘上以行的方式放置: 每个文档对应一个行,这个行包含该文档所有的stored fields。
        Doc values    以列的方式存储. 不同文档的相同字段被连续地存储在一起. 这种存储方式,可以直接访问一个特定的文档的特定字段。
        Source 与Stored fields方式差不多额外增加了_source字段存储全量json。

7、Force merge优化
        减少小的segment
8、ES缓存设计
9、聚合优化
     Metric 聚合 - 计算字段值的求和平均值,Geo-hash,采样等
     Bucket 聚合 - 将字段值、范围、或者其它条件分组到Bucket中
     Pipeline 聚合 - 从已聚合数据中进行聚合查询
10、分页查询
    1、from size
    2、滚动翻页(Search Scroll)
    3、流式翻页(Search After)

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgaaiah
系列文章
更多 icon
同类精品
更多 icon
继续加载