天天看點

elasticsearch的副本和分片的差別

一:概念

(1)叢集(Cluster): ES可以作為一個獨立的單個搜尋伺服器。不過,為了處理大型資料集,實作容錯和高可用性,ES可以運作在許多互相合作的伺服器上。這些伺服器的集合稱為叢集。

(2)節點(Node): 形成叢集的每個伺服器稱為節點。

索引(index): 在 ES 中, 索引是一組文檔的集合

(3)分片(shard)

當有大量的文檔時,由于記憶體的限制、磁盤處理能力不足、無法足夠快的響應用戶端的請求等,一個節點可能不夠。這種情況下,資料可以分為較小的分片。每個分片放到不同的伺服器上。

當你查詢的索引分布在多個分片上時,ES會把查詢發送給每個相關的分片,并将結果組合在一起,而應用程式并不知道分片的存在。即:這個過程對使用者來說是透明的。

(4)副本(Replia)

為提高查詢吞吐量或實作高可用性,可以使用分片副本。

副本是一個分片的精确複制,每個分片可以有零個或多個副本。ES中可以有許多相同的分片,其中之一被選擇更改索引操作,這種特殊的分片稱為主分片。

當主分片丢失時,如:該分片所在的資料不可用時,叢集将副本提升為新的主分片。

二:差別

分片與副本的差別在于:

當你分片設定為5,資料量為30G時,es會自動幫我們把資料均衡地配置設定到5個分片上,即每個分片大概有6G資料,當你查詢資料時,ES會把查詢發送給每個相關的分片,并将結果組合在一起。

而副本,就是對分布在5個分片的資料進行複制。因為分片是把資料進行分割而已,資料依然隻有一份,這樣的目的是保障查詢的高效性,副本則是多複制幾份分片的資料,這樣的目的是保障資料的高可靠性,防止資料丢失。

注意

索引建立後,分片個數是不可以更改的,副本數可動态修改。

分片(shard)

又叫主分片,最小的工作單元,存放一部分資料。

一個index預設有五個分片,建立index時可以指定分片數量,後續如果需要修改分片數量,請删庫重新寫。

分片簡單了解

一個實體機器的性能是有瓶頸的,直接往實體機上存資料,存儲數量有上限。

ES采用了分片的概念,将海量資料切分成片,每一個分片,存儲一部分資料。

在一整個大的叢集裡,包含很多節點,每個節點又包含很多分片,這樣,海量資料由叢集來承載,分片(資料)在叢集這篇大海裡自由遊蕩。

副本(replica)

又叫從分片,分片的備份,防止資料丢失。

并且當主分片出現實體故障時,從分片頂上去,負責資料的檢索等隻讀請求。

繼續閱讀