全部產品
Search
文件中心

Elasticsearch:基本概念

更新時間:Jun 30, 2024

本文介紹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與關係型資料庫的映射關係如下表所示:
Elasticsearch關係型資料庫
索引(index)資料庫(Database)
文件類型(type)表(Table)
文檔(document)一行資料(Row)
欄位(field)一列資料(Column)
映射(mapping)資料庫的組織和結構(Schema)

分區(shards)和副本(replicas)

shards代表索引分區,Elasticsearch可以把一個完整的索引分成多個分區,這樣的好處是可以把一個大的索引拆分成多個,分布到不同的節點上,構成分布式搜尋。主分區的數量只能在索引建立時指定,並且索引建立後不能更改。

replicas是索引的備份,Elasticsearch可以設定多個副本。寫操作會先在主分區上完成,然後分發到副本分區上。因為索引的主分區和副本分區都可以對外提供查詢服務,所以副本能夠提升系統的高可用性和搜尋時的並發效能。但如果副本太多,也會增加寫操作時資料同步的負擔。

Elasticsearch 7.0以下版本預設為一個索引建立5個主分區,並分別為每個主分區建立1個副本分區,7.0及以上版本預設為一個索引建立1個主分區和1個副本分區。兩者區別如下:
分區類型支援處理的請求數量是否可修改其他說明
主分區支援處理查詢和索引請求。在建立索引時設定,設定後不可更改,詳細資料請參見步驟三:建立索引索引內任意一個文檔都儲存在一個主分區中,所以主分區的數量決定著索引能夠儲存的最巨量資料量。
重要 主分區不是越多越好,因為主分區越多,Elasticsearch效能開銷也會越大。
副本分區支援處理查詢請求,不支援處理索引請求。可在任何時候添加或刪除副本分區,詳細資料請參見索引模板副本分區對搜尋效能非常重要,主要體現在以下兩個方面:
  • 提高系統的容錯效能,當某個節點某個分區損壞或丟失時可以從副本中恢複。
  • 提高Elasticsearch的查詢效率,Elasticsearch會自動對搜尋請求進行負載平衡。
重要 shard的大小和數量是影響Elasticsearch叢集穩定性和效能的重要因素之一。Elasticsearch叢集中任何一個索引都需要有一個合理的shard規劃。合理的shard規劃能夠防止因業務不明確,導致分區龐大消耗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等傳輸協議進行互動。