本文介紹阿里云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,有本地文件系統(默認)、分布式文件系統、Hadoop的HDFS和阿里云的OSS云存儲服務。
discovery.zen
discovery.zen代表Elasticsearch的自動發現節點機制,Elasticsearch是一個基于P2P的系統,它先通過廣播尋找存在的節點,再通過多播協議進行節點之間的通信,同時也支持點對點的交互。
Transport
Transport代表Elasticsearch內部節點或集群與客戶端的交互方式,默認使用TCP協議進行交互。同時支持通過插件的方式集成,因此也可以使用HTTP協議(JSON格式)、thrift、memcached、zeroMQ等傳輸協議進行交互。