ElasticSearch優化系列三:索引過程
歡迎關注我們的微信公眾號「人工智慧LeadAI」(ID:atleadai)
大家可能會遇到索引數據比較慢的過程。其實明白索引的原理就可以有針對性的進行優化。ES索引的過程到相對Lucene的索引過程多了分散式數據的擴展,而這ES主要是用tranlog進行各節點之間的數據平衡。所以從上我可以通過索引的settings進行第一優化:
"index.translog.flush_threshold_ops":"10000" "refresh_interval" : "1s"
這兩個參數第一是到translog數據達到多少條進行平衡,默認為5000,而這個過程相對而言是比較浪費時間和資源的。所以我們可以將這個值調大一些還是設為-1關閉,進而手動進行translog平衡。第二參數是刷新頻率,默認為1s是指索引在生命周期內定時刷新,一但有數據進來能refresh像lucene裡面commit,我們知道當數據addDoucment後,還不能檢索到要commit之後才能行數據的檢索,所以可以將其關閉,在最初索引完後手動refresh之,然後將索引setting裡面的index.refresh_interval參數按需求進行修改,從而可以提高索引過程效率。
另外的知道ES索引過程中如果有副本存在,數據也會馬上同步到副本中去。我個人建議在索引過程中將副本數設為0,待索引完成後將副本數按需量改回來,這樣也可以提高索引效率。
「number_of_replicas」: 0
其實檢索速度快度與索引質量有很大的關係。而索引質量的好壞主要與以下幾方面有關:
分片數
分片數是與檢索速度非常相關的的指標,如果分片數過少或過多都會導致檢索比較慢。分片數過多會導致檢索時打開比較多的文件別外也會導致多台伺服器之間通訊。而分片數過少會導致單個分片索引過大,所以檢索速度慢。基於索引分片數=數據總量/單分片數的計算公式,在確定分片數之前需要進行單服務單索引單分片的測試,目前我們測試的結果單個分片的內容為10G。
分片(Shard):一個索引會分成多個分片存儲,分片數量在索引建立後不可更改,推薦【分片數*副本數=集群數量】
確定分片的數量和副本的數量
ElasticSearch在創建索引數據時,最好指定相關的shards數量和replicas, 否則會使用伺服器中的默認配置參數shards=5,replicas=1。
因為這兩個屬性的設置直接影響集群中索引和搜索操作的執行。假設你有足夠的機器來持有碎片和副本,那麼可以按如下規則設置這兩個值:
1) 擁有更多的碎片可以提升索引執行能力,並允許通過機器分發一個大型的索引;
2) 擁有更多的副本能夠提升搜索執行能力以及集群能力。
對於一個索引來說,number_of_shards只能設置一次,而number_of_replicas可以使用索引更新設置API在任何時候被增加或者減少。
這兩個配置參數在配置文件的配置如下:
index.number_of_shards: 5 number_of_replicas: 1
Elastic官方文檔建議:一個Node中一個索引最好不要多於三個shards.配置total_shards_per_node參數,限制每個index每個節點最多分配多少個發片.
http://www.open-open.com/doc/view/f240d61f8f7745098b4459c2483feb40
http://wenku.baidu.com/linkurl=bwD9mpebmQ28mqPj6Z0P1_A9bgFKnhIss8UrRA_Nsv7oTFuUEa9JgUdr9ynKc8OjWvd0pVLsp3tYZTFaNcxVt30EyFBCvkNflFGjMWcqsRq
副本數
副本數與索引的穩定性有比較大的關係,如果Node在非正常掛了,經常會導致分片丟失,為了保證這些數據的完整性,可以通過副本來解決這個問題。建議在建完索引後在執行Optimize後,馬上將副本數調整過來。
分詞
分詞對於索引的影響可大可小,看自己把握。大家或許認為詞庫越多,分詞效果越好,索引質量越好,其實不然。分詞有很多演算法,大部分基於詞表進行分詞。也就是說詞表的大小決定索引大小。所以分詞與索引膨漲率有直接關係。詞表不應很多,而對文檔相關特徵性較強的即可。比如論文的數據進行建索引,分詞的詞表與論文的特徵越相似,詞表數量越小,在保證查全查準的情況下,索引的大小可以減少很多。索引大小減少了,那麼檢索速度也就提高了。
索引段
索引段即lucene中的segments概念,我們知道ES索引過程中會refresh和tranlog也就是說我們在索引過程中segments number不只一個。而segments number與檢索是有直接聯繫的,segments number越多檢索越慢,而將segments numbers 有可能的情況下保證為1,這將可以提高將近一半的檢索速度。
https://www.elastic.co/guide/en/elasticsearch/guide/current/hardware.html
http://weixin.qq.com/r/ZDnC2j-E5GKbrXu592x2 (二維碼自動識別)
點擊量最高的文章
LSTM模型在問答系統中的應用
基於TensorFlow的神經網路解決用戶流失概覽問題
最全常見演算法工程師面試題目整理(一)
最全常見演算法工程師面試題目整理(二)
TensorFlow從1到2 | 第三章 深度學習革命的開端:卷積神經網路
裝飾器 | Python高級編程
今天不如來複習下Python基礎
推薦閱讀:
※ElasticSearch優化系列一:集群節點規劃
※Elasticsearch:文檔的CRUD操作API(第三篇)
※使用ElasticSearch搭建日誌系統
※CaseStudy:ES索引損壞
※ES 集群間遷移數據(一)
TAG:Elasticsearch |