溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Elasticsearch如何實現聚合優(yōu)化

發(fā)布時間:2021-12-16 10:15:20 來源:億速云 閱讀:401 作者:小新 欄目:大數據

這篇文章主要為大家展示了“Elasticsearch如何實現聚合優(yōu)化”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Elasticsearch如何實現聚合優(yōu)化”這篇文章吧。

1、聚合為什么慢?

大多數時候對單個字段的聚合查詢還是非??斓模?但是當需要同時聚合多個字段時,就可能會產生大量的分組,最終結果就是占用 Elasticsearch大量內存,從而導致 OOM 的情況發(fā)生。 
實踐應用發(fā)現,以下情況都會比較慢: 

  • 1)待聚合文檔數比較多(千萬、億、十億甚至更多); 

  • 2)聚合條件比較復雜(多重條件聚合); 

  • 3)全量聚合(翻頁的場景用)。

2、聚合優(yōu)化方案探討

優(yōu)化方案一:默認深度優(yōu)先聚合改為廣度優(yōu)先聚合。

"collect_mode" : "breadth_first"
  • depth_first 直接進行子聚合的計算

  • breadth_first 先計算出當前聚合的結果,針對這個結果在對子聚合進行計算。

優(yōu)化方案二: 每一層terms aggregation內部加一個 “execution_hint”: “map”。

 "execution_hint": "map"

國內解釋最詳細的版本來自Wood大叔: 
Elasticsearch如何實現聚合優(yōu)化
Map方式的結論可簡要概括如下: 
1)查詢結果直接放入內存中構建map,在查詢結果集小的場景下,速度極快; 
2)但如果待結果集合很大的情況,map方式不一定也快。

優(yōu)化方案N

待進一步深入實踐......

3、做個實驗

聚合的平衡點是多少呢?

3.1 實驗場景

場景一:在近億的document中,檢索滿足給定條件的數據,并對聚合結果全量聚合。 
場景二:在百萬級別的document中,全量聚合。 
場景三:在近億級別的document中,全量聚合。

3.2 聚合操作

POST index_*/_search   

{

  "sort": [

    {

      "nrply": "desc"

    }

  ],

  "aggs": {

    "count_over_sin": {

      "terms": {

        "field": "sin_id",

   "execution_hint": "map",

        "size": 1000,

        "collect_mode": "breadth_first"

      }

    }


  },

  "size":0

}

1)修改索引名稱,以獲取更多的文檔。 
2)map模式添加 “execution_hint”: “map”,默認是global_ordinals模式。 
3)”size”: 1000,設定聚合取值。

3.3 聚合結果

Elasticsearch如何實現聚合優(yōu)化

以上是“Elasticsearch如何實現聚合優(yōu)化”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI