人的知识就好比一个圆圈,圆圈里面是已知的,圆圈外面是未知的。你知道得越多,圆圈也就越大,你不知道的也就越多。

0%

Elasticsearch 读性能优化

数据建模

  • 尽可能 Denormalize 数据,从而获取最佳性能
    • 使用 Nested 类型的数据,查询数据会慢几倍
    • 使用 Parent/Child 关系,查询速度会慢几百倍
  • 尽量将数据先行计算,然后保存在 Elasticsearch 中,以避查询时的 Script 计算
  • 尽量使用 Filter Context,利用缓存机制,同时减少不必要的算分
  • 结合 profile、explain API 分析慢查询的问题,持续优化数据模型
    • 严禁使用 * 开头的通配符 Terms 查询
  • 聚合查询时,控制聚合的数量,以减少内存的开销

优化分片

  • 避免 Over Sharing
    一个查询需要访问每一个分片,分片过多,会导致不必要的查询开销
  • 结合应用场景,控制单个分片的尺寸
    Search: 200GB Logging: 400GB
  • Force-merge Read-only 索引
    使用基于时间序列的索引,将只读的索引进行 force merge,减少 segment 数量
小礼物走一走,来 Github 关注我