您好,登錄后才能下訂單哦!
本篇內容介紹了“elasticsearch分片的操作”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Es中所有數據均衡的存儲在集群中各個節點的分片中,會影響ES的性能、安全和穩定性, 所以很有必要了解一下它。
簡單來講就是咱們在ES中所有數據的文件塊,也是數據的最小單元塊,整個ES集群的核心就是對所有分片的分布、索引、負載、路由等達到驚人的速度
實列場景:
假設 IndexA 有2個分片,我們向 IndexA 中插入10條數據 (10個文檔),那么這10條數據會盡可能平均的分為5條存儲在第一個分片,剩下的5條會存儲在另一個分片中。
和主流關系型數據庫的表分區的概念有點類似,如果你比較熟悉關系型數據庫的話。
創建 IndexName 索引時候,在 Mapping 中可以如下設置分片 (curl)
PUT indexName { "settings": { "number_of_shards": 5 } }
注意
索引建立后,分片個數是不可以更改的
分片個數是越多越好還是越少越好了?根據整個索引的數據量來判斷。
實列場景:
如果 IndexA 所有數據文件大小是300G,該怎么定制方案了?
建議:(僅參考)
1、每一個分片數據文件小于30GB
2、每一個索引中的一個分片對應一個數據節點
3、節點數大于等于分片數(不含復制分片數)
根據建議,至少需要 14個分片,11個數據分片,3個主節點。
結果: 建11個數據節點 (Node),Mapping 指定分片數為 10,滿足每一個節點一個分片,每一個分片數據帶下在30G左右。同時作為健壯性和擴展性,多一個數據節點。
SN(分片數) = IS(索引大小) / 30
NN(節點數) = SN(分片數) + MNN(主節點數[無數據]) + NNN(負載節點數)
我們可以指定es去具體的分片查詢從而進一步的實現es極速查詢。
1:randomizeacross shards
隨機選擇分片查詢數據,es的默認方式
2:_local
優先在本地節點上的分片查詢數據然后再去其他節點上的分片查詢,本地節點沒有IO問題但有可能造成負載不均問題。數據量是完整的。
3:_primary
只在主分片中查詢不去副本查,一般數據完整。
4:_primary_first
優先在主分片中查,如果主分片掛了則去副本查,一般數據完整。
5:_only_node
只在指定id的節點中的分片中查詢,數據可能不完整。
6:_prefer_node
優先在指定你給節點中查詢,一般數據完整。
7:_shards
在指定分片中查詢,數據可能不完整。
8:_only_nodes
可以自定義去指定的多個節點查詢,es不提供此方式需要改源碼。
/** * 指定分片 查詢 */ @Test public void testPreference() { SearchResponse searchResponse = transportClient.prepareSearch(index) .setTypes("add") //.setPreference("_local") //.setPreference("_primary") //.setPreference("_primary_first") //.setPreference("_only_node:ZYYWXGZCSkSL7QD0bDVxYA") //.setPreference("_prefer_node:ZYYWXGZCSkSL7QD0bDVxYA") .setPreference("_shards:0,1,2") .setQuery(QueryBuilders.matchAllQuery()).setExplain(true).get(); SearchHits hits = searchResponse.getHits(); System.out.println(hits.getTotalHits()); SearchHit[] hits2 = hits.getHits(); for(SearchHit h : hits2) { System.out.println(h.getSourceAsString()); } }
“elasticsearch分片的操作”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。