本篇內(nèi)容介紹了“elasticsearch分片的操作”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)主要從事成都網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)浦江,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18982081108
Es中所有數(shù)據(jù)均衡的存儲(chǔ)在集群中各個(gè)節(jié)點(diǎn)的分片中,會(huì)影響ES的性能、安全和穩(wěn)定性, 所以很有必要了解一下它。
簡單來講就是咱們在ES中所有數(shù)據(jù)的文件塊,也是數(shù)據(jù)的最小單元塊,整個(gè)ES集群的核心就是對所有分片的分布、索引、負(fù)載、路由等達(dá)到驚人的速度
實(shí)列場景:
假設(shè) IndexA 有2個(gè)分片,我們向 IndexA 中插入10條數(shù)據(jù) (10個(gè)文檔),那么這10條數(shù)據(jù)會(huì)盡可能平均的分為5條存儲(chǔ)在第一個(gè)分片,剩下的5條會(huì)存儲(chǔ)在另一個(gè)分片中。
和主流關(guān)系型數(shù)據(jù)庫的表分區(qū)的概念有點(diǎn)類似,如果你比較熟悉關(guān)系型數(shù)據(jù)庫的話。
創(chuàng)建 IndexName 索引時(shí)候,在 Mapping 中可以如下設(shè)置分片 (curl)
PUT indexName { "settings": { "number_of_shards": 5 } }
注意
索引建立后,分片個(gè)數(shù)是不可以更改的
分片個(gè)數(shù)是越多越好還是越少越好了?根據(jù)整個(gè)索引的數(shù)據(jù)量來判斷。
實(shí)列場景:
如果 IndexA 所有數(shù)據(jù)文件大小是300G,該怎么定制方案了?
建議:(僅參考)
1、每一個(gè)分片數(shù)據(jù)文件小于30GB
2、每一個(gè)索引中的一個(gè)分片對應(yīng)一個(gè)數(shù)據(jù)節(jié)點(diǎn)
3、節(jié)點(diǎn)數(shù)大于等于分片數(shù)(不含復(fù)制分片數(shù))
根據(jù)建議,至少需要 14個(gè)分片,11個(gè)數(shù)據(jù)分片,3個(gè)主節(jié)點(diǎn)。
結(jié)果: 建11個(gè)數(shù)據(jù)節(jié)點(diǎn) (Node),Mapping 指定分片數(shù)為 10,滿足每一個(gè)節(jié)點(diǎn)一個(gè)分片,每一個(gè)分片數(shù)據(jù)帶下在30G左右。同時(shí)作為健壯性和擴(kuò)展性,多一個(gè)數(shù)據(jù)節(jié)點(diǎn)。
SN(分片數(shù)) = IS(索引大小) / 30
NN(節(jié)點(diǎn)數(shù)) = SN(分片數(shù)) + MNN(主節(jié)點(diǎn)數(shù)[無數(shù)據(jù)]) + NNN(負(fù)載節(jié)點(diǎn)數(shù))
我們可以指定es去具體的分片查詢從而進(jìn)一步的實(shí)現(xiàn)es極速查詢。
1:randomizeacross shards
隨機(jī)選擇分片查詢數(shù)據(jù),es的默認(rèn)方式
2:_local
優(yōu)先在本地節(jié)點(diǎn)上的分片查詢數(shù)據(jù)然后再去其他節(jié)點(diǎn)上的分片查詢,本地節(jié)點(diǎn)沒有IO問題但有可能造成負(fù)載不均問題。數(shù)據(jù)量是完整的。
3:_primary
只在主分片中查詢不去副本查,一般數(shù)據(jù)完整。
4:_primary_first
優(yōu)先在主分片中查,如果主分片掛了則去副本查,一般數(shù)據(jù)完整。
5:_only_node
只在指定id的節(jié)點(diǎn)中的分片中查詢,數(shù)據(jù)可能不完整。
6:_prefer_node
優(yōu)先在指定你給節(jié)點(diǎn)中查詢,一般數(shù)據(jù)完整。
7:_shards
在指定分片中查詢,數(shù)據(jù)可能不完整。
8:_only_nodes
可以自定義去指定的多個(gè)節(jié)點(diǎn)查詢,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分片的操作”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!