叢集讀效能優化

CrazyZard發表於2020-03-08
  • Elasticsearch != 關係型資料庫
  • 儘可能 Denormalize 資料,從而獲取最佳的效能
    • 使用 Nested 型別的資料。查詢速度會慢幾倍
    • 使用 Parent / Child 關係。查詢速度會慢幾百倍
  • 儘量將資料先行計算,然後儲存到 Elasticsearch 中。儘量避免查詢時的 Script 計算
  • 儘量使用 Filter Context,利用快取機制,減少不必要的算分
  • 結合 profile,explain API 分析慢查詢的問題,持續優化資料模型
    • 嚴禁使用 * 開頭萬用字元 Terms 查詢
  • 可以在 Index 文件時,使用 Ingest Pipeline,計算並寫入某個欄位

叢集讀效能優化

叢集讀效能優化

  • 聚合查詢會消耗記憶體,特別是針對很大的資料集進行聚合運算
    • 如果可以控制聚合的數量,就能減少記憶體的開銷
  • 當需要使用不同的 Query Scope,可以使用 Filter Bucket

叢集讀效能優化

  • 萬用字元開頭的正則,效能非常糟糕,需避免使用

叢集讀效能優化

  • 避免 Over Sharing
    • 一個查詢需要訪問每一個分片,分片過多,會導致不必要的查詢開銷
  • 結合應用場景,控制單個分片的尺寸
    • Search: 20GB
    • Logging:40GB
  • Force-merge Read-only 索引
    • 使用基於時間序列的索引,將只讀的索引進行 force merge,減少 segment 數
  • 影響查詢效能的一些因素
    • 資料模型和索引配置是否優化
    • 資料規模是否過大,通過 Filter 減少不必要的資料計算
    • 查詢語句是否優化
本作品採用《CC 協議》,轉載必須註明作者和本文連結

快樂就是解決一個又一個的問題!

相關文章