本文介紹Elasticsearch服務使用過程中遇到的常用名詞的基本概念和簡要描述。
叢集(cluster)
一個Elasticsearch叢集由一個或多個Elasticsearch節點群組成,所有節點共同儲存資料。每個叢集都應有一個唯一的叢集名(ClusterName),同一環境內如果存在同名叢集,可能會出現不可知異常。
節點(node)
- 資料節點:儲存索引資料的節點,主要對文檔進行增刪改查、彙總等操作。
- 專有主節點:對叢集進行操作,例如建立或刪除索引,跟蹤哪些節點是叢集的一部分,並決定哪些分區分配給相關的節點。穩定的主節點對叢集的健康非常重要,預設情況下叢集中的任一節點都可能被選為主節點。
- 協調節點:分擔資料節點的CPU開銷,從而提高處理效能和服務穩定性。
索引(index)
一個索引是一個擁有一些相似特徵的文檔的集合,相當於關係型資料庫中的一個資料庫。例如,您可以擁有一個客戶資料的索引,一個商品目錄的索引,以及一個訂單資料的索引。一個索引通常使用一個名稱(所有字母必須小寫)來標識,當針對這個索引的文檔執行索引、搜尋、更新和刪除操作的時候,這個名稱被用來指向索引。
類型(type)
一個類型通常是一個索引的一個邏輯分類或分區,允許在一個索引下儲存不同類型的文檔,相當於關係型資料庫中的一張表,例如使用者類型、部落格類型等。由於6.x以後的Elasticsearch版本已經不支援在一個索引下建立多個類型,因此類型概念在後續版本中不再被提及。Elasticsearch 5.x允許在一個索引下儲存不同類型的文檔,Elasticsearch 6.x在一個索引下只允許一個類型,Elasticsearch 7.x索引類型命名只允許_doc,詳情請參見Elasticsearch官方文檔。
文檔(document)
一個文檔是可以被索引的基本資料單元,相當於關係型資料庫中的一行資料。例如,您可以為一個客戶建立一個文檔,或者為一個商品建立一個文檔。文檔可以用JSON格式來表示。在一個索引中,您可以儲存任意多的文檔,且文檔必須被索引。
欄位(field)
field是組成文檔的最小單位,相當於關係型資料庫中的一列資料。
映射(mapping)
mapping用來定義一個文檔以及其所包含的欄位如何被儲存和索引,相當於關係型資料庫中的Schema,例如在mapping中定義欄位的名稱和類型,以及所使用的分詞器。
Elasticsearch | 關係型資料庫 |
索引(index) | 資料庫(Database) |
文件類型(type) | 表(Table) |
文檔(document) | 一行資料(Row) |
欄位(field) | 一列資料(Column) |
映射(mapping) | 資料庫的組織和結構(Schema) |
分區(shards)和副本(replicas)
shards代表索引分區,Elasticsearch可以把一個完整的索引分成多個分區,這樣的好處是可以把一個大的索引拆分成多個,分布到不同的節點上,構成分布式搜尋。主分區的數量只能在索引建立時指定,並且索引建立後不能更改。
replicas是索引的備份,Elasticsearch可以設定多個副本。寫操作會先在主分區上完成,然後分發到副本分區上。因為索引的主分區和副本分區都可以對外提供查詢服務,所以副本能夠提升系統的高可用性和搜尋時的並發效能。但如果副本太多,也會增加寫操作時資料同步的負擔。
分區類型 | 支援處理的請求 | 數量是否可修改 | 其他說明 |
主分區 | 支援處理查詢和索引請求。 | 在建立索引時設定,設定後不可更改,詳細資料請參見步驟三:建立索引。 | 索引內任意一個文檔都儲存在一個主分區中,所以主分區的數量決定著索引能夠儲存的最巨量資料量。 重要 主分區不是越多越好,因為主分區越多,Elasticsearch效能開銷也會越大。 |
副本分區 | 支援處理查詢請求,不支援處理索引請求。 | 可在任何時候添加或刪除副本分區,詳細資料請參見索引模板。 | 副本分區對搜尋效能非常重要,主要體現在以下兩個方面:
|
gateway
gateway代表Elasticsearch索引快照的儲存方式,Elasticsearch預設優先將索引存放到記憶體中,當記憶體滿時再將這些索引持久化儲存至本地硬碟。gateway對索引快照進行儲存,當這個Elasticsearch叢集關閉再重新啟動時就會從gateway中讀取索引備份資料。Elasticsearch支援多種類型的gateway,有本地檔案系統(預設)、Distributed File System、Hadoop的HDFS和阿里雲的OSS雲端儲存體服務。
discovery.zen
discovery.zen代表Elasticsearch的自動探索節點機制,Elasticsearch是一個基於P2P的系統,它先通過廣播尋找存在的節點,再通過多播協議進行節點之間的通訊,同時也支援點對點的互動。
Transport
Transport代表Elasticsearch內部節點或叢集與用戶端的互動方式,預設使用TCP協議進行互動。同時支援通過外掛程式的方式整合,因此也可以使用HTTP協議(JSON格式)、thrift、memcached、zeroMQ等傳輸協議進行互動。