Elasticsearch 索引優化篇 3

2021-06-28 12:06:47 字數 2245 閱讀 7908

es索引優化篇主要從兩個方面解決問題,一是索引資料過程;二是檢索過程。

索引資料過程我在上面幾篇文章中有提到怎麼建立索引和匯入資料,但是大家可能會遇到索引資料比較慢的過程。其實明白索引的原理就可以有針對性的進行優化。es索引的過程到相對lucene的索引過程多了分布式資料的擴充套件,而這es主要是用tranlog進行各節點之間的資料平衡。所以從上我可以通過索引的settings進行第一優化:

"index.translog.flush_threshold_ops": "100000"

"index.refresh_interval": "-1",

這兩個引數第一是到tranlog資料達到多少條進行平衡,預設為5000,而這個過程相對而言是比較浪費時間和資源的。所以我們可以將這個值調大一些還是設為-1關閉,進而手動進行tranlog平衡。第二引數是重新整理頻率,預設為120s是指索引在生命週期內定時重新整理,一但有資料進來能refresh像lucene裡面commit,我們知道當資料adddoucment會,還不能檢索到要commit之後才能行資料的檢索所以可以將其關閉,在最初索引完後手動refresh一之,然後將索引setting裡面的index.refresh_interval引數按需求進行修改,從而可以提高索引過程效率。

另外的知道es索引過程中如果有副本存在,資料也會馬上同步到副本中去。我個人建議在索引過程中將副本數設為0,待索引完成後將副本數按需量改回來,這樣也可以提高索引效率。

「number_of_replicas」: 0

上面聊了一次索引過程的優化之後,我們再來聊一下檢索速度比較慢的問題,其實檢索速度快度與索引質量有很大的關係。而索引質量的好壞與很多因素有關。

一、分片數

分片數,與檢索速度非常相關的的指標,如果分片數過少或過多都會導致檢索比較慢。分片數過多會導致檢索時開啟比較多的檔案別外也會導致多台伺服器之間通訊。而分片數過少為導至單個分片索引過大,所以檢索速度慢。

在確定分片數之前需要進行單服務單索引單分片的測試。比如我之前在ibm-3650的機器上,建立乙個索引,該索引只有乙個分片,分別在不同資料量的情況下進行檢索速度測試。最後測出單個分片的內容為20g。

所以索引分片數=資料總量/單分片數

目前,我們資料量為4億多條,索引大小為近1.5t左右。因為是文件資料所以單資料都中8k以前。現在檢索速度保證在100ms 以下。特別情況在500ms以下,做200,400,800,1000,1000+使用者長時間併發測試時最壞在750ms以下.

二、副本數

副本數與索引的穩定性有比較大的關係,怎麼說,如果es在非正常掛了,經常會導致分片丟失,為了保證這些資料的完整性,可以通過副本來解決這個問題。建議在建完索引後在執行optimize後,馬上將副本數調整過來。

大家經常有乙個誤去副本越多,檢索越快,這是不對的,副本對於檢索速度其它是減無增的我曾做過實現,隨副本數的增加檢索速度會有微量的下降,所以大家在設定副本數時,需要找乙個平衡值。另外設定副本後,大家有可能會出現兩次相同檢索,出現出現不同值的情況,這裡可能是由於tranlog沒有平衡、或是分片路由的問題,可以通過?preference=_primary 讓檢索在主片分上進行。

三、分詞

其實分詞對於索引的影響可大可小,看自己把握。大家越許認為詞庫的越多,分詞效果越好,索引質量越好,其實不然。分詞有很多演算法,大部分基於詞表進行分詞。也就是說詞表的大小決定索引大小。所以分詞與索引膨漲率有直接鏈結。詞表不應很多,而對文件相關特徵性較強的即可。比如**的資料進行建索引,分詞的詞表與**的特徵越相似,詞表數量越小,在保證查全查準的情況下,索引的大小可以減少很多。索引大小減少了,那麼檢索速度也就提高了。

四、索引段

索引段即lucene中的segments概念,我們知道es索引過程中會refresh和tranlog也就是說我們在索引過程中segments number不至乙個。而segments number與檢索是有直接聯絡的,segments number越多檢索越慢,而將segments numbers 有可能的情況下保證為1這將可以提到將近一半的檢索速度。

五、刪除文件

刪除文件在lucene中刪除文件,資料不會馬上進行硬碟上除去,而進在lucene索引中產生乙個.del的檔案,而在檢索過程中這部分資料也會參與檢索,lucene在檢索過程會判斷是否刪除了,如果刪除了在過濾掉。這樣也會降低檢索效率。所以可以執行清除刪除文件。

Elasticsearch索引建議

背景 最近在做日誌收集,用到elasticsearch作為儲存層,因為日誌量比較大,一天近2t,所以每時每刻都會有大量的插入操作。又由於是給開發人員查日誌使用,所以查詢的量比較小。受限於儲存空間,目前僅保留7天的日誌,多數為乙個業務模組乙個索引,按天切分索引。關於索引和型別的取捨,建立多個索引還是乙...

elasticsearch 建立索引

介紹 分詞器 analyzer 包括乙個分解器 tokenizer 和多個詞元過濾器 filter 詞元過濾器的作是對分詞器提取的詞元進一步處理,比如轉成小寫,使用edge ngram,同義詞等,處理之後成為索引詞 term 文件正包含了幾個這樣的term成為frequency 詞頻 分解器 tok...

Elasticsearch 索引例項

elasticsearch包含了一系列的感念,比如索引 indexing 搜尋 search 以及聚合 aggregations 現在我們主要介紹indexing。在elasticsearch中,文件歸屬於一種型別 type 而這些型別存在於索引 index 中,我們可以畫一些簡單的對比圖來模擬傳統...