在ElasticSearch中,集群(Cluster),節點(Node),分片(Shard),Indices(索引),replicas(備份)之間是什么關系?


最近在知乎上看到了這個問題,自己也搞了半學期的Elasticsearch,於是就想用自己所知道的淺陋知識來回答一下這個問題。

Cluster包含多個node,Indices不應該理解成動詞索引,Indices可理解成關系數據庫中的databases,Indices可包含多個Index,Index對應關系數據庫中的database,它是用來存儲相關文檔的。
Elasticsearch與關系數據的類比對應關系如下:

Relational DB ⇒ Databases ⇒ Tables ⇒ Rows ⇒ Columns

Elasticsearch ⇒ Indices ⇒ Types ⇒ Documents ⇒ Fields

這里的document的可以理解為一個JSON序列對象。每個document可包含多個field。

 

再來說說Shard,每個Index(對應Database)包含多個Shard,默認是5個,分散在不同的Node上,但不會存在兩個相同的Shard存在一個Node上,這樣就沒有備份的意義了。Shard是一個最小的Lucene索引單元。

 

當來一個document的時候,Elasticsearch通過對docid進行hash來確定其放在哪個shard上面,然后在shard上面進行索引存儲。

 

replicas就是備份,Elasticsearch采用的是Push Replication模式,當你往 master主分片上面索引一個文檔,該分片會復制該文檔(document)到剩下的所有 replica副本分片中,這些分片也會索引這個文檔。我個人覺得這種模式很nice,有些時候對於一個document的進行索引可能生成很大的索引文件,會很占帶寬,而只傳輸原始文件會好很多。



當進行查詢是,如果提供了查詢的DocID,Elasticsearch通過hash就知道Doc存在哪個shard上面,再通過routing table查詢就知道再哪個node上面,讓后去node上面去取就好了。如果不提供DocID,那么Elasticsearch會在該Index(indics)shards所在的所有node上執行搜索預警,然后返回搜索結果,由coordinating node gather之后返回給用戶。

 

配置上需要把握什么樣的原則,應該去看一個ES優化方面的資料,推薦兩本書

ElasticSearch Server (豆瓣)Mastering ElasticSearch (豆瓣)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM