ElasticSearch 2 (7) - 基本概念
ElasticSearch 2 (7) - 基本概念
摘要
ElasticSearch的一些基本核心概念,理解這些概念有助于ElasticSearch的學(xué)習(xí)
- 準(zhǔn)實(shí)時(shí)NRT(Near Realtime)
- 集群
- 節(jié)點(diǎn)
- 索引
- 類型
- 文檔
- 分片與副本(Shards & Replicas)
版本
elasticsearch版本: elasticsearch-2.2.0
概念
準(zhǔn)實(shí)時(shí)NRT(Near Realtime)
ElasticSearch是一個(gè)準(zhǔn)實(shí)時(shí)的搜索平臺(tái)。準(zhǔn)實(shí)時(shí)的意思是說它的延遲非常小,從為一個(gè)文檔建索引到這個(gè)文檔可以搜索出來,只需要1秒的時(shí)間。
集群(Cluster)
一個(gè)ES集群可以由一個(gè)或者多個(gè)節(jié)點(diǎn)(nodes or servers)組成。所有這些節(jié)點(diǎn)用來存儲(chǔ)所有的數(shù)據(jù)以及提供聯(lián)合索引,為我們提供跨節(jié)點(diǎn)查詢的能力。一個(gè)ES集群的名稱是唯一的,默認(rèn)情況下為“elasticsearch”。這個(gè)名稱非常重要,因?yàn)橐粋€(gè)節(jié)點(diǎn)(node)會(huì)通過這個(gè)名稱來判斷是否加入已有的集群。
必須保證在不同環(huán)境下使用不同的集群名稱,否則節(jié)點(diǎn)可能會(huì)加入錯(cuò)誤的集群。比如我們可以為開發(fā)環(huán)境(development)、測(cè)試環(huán)境(staging)、產(chǎn)品環(huán)境(production)分別給出不同的集群名稱:logging-dev、logging-staging、logging-prod。
需要注意的是我們也可以使用一個(gè)只有一個(gè)節(jié)點(diǎn)的集群,或者我們也可以有不同的集群,每個(gè)集群都有自己唯一的名稱。
節(jié)點(diǎn)(Node)
一個(gè)節(jié)點(diǎn)是一個(gè)集群中的一臺(tái)服務(wù)器,它用來存儲(chǔ)數(shù)據(jù),參與集群的索引以及提供搜索能力。如ES集群,一個(gè)節(jié)點(diǎn)也是由它的唯一名稱來標(biāo)識(shí),默認(rèn)狀態(tài)下,ES會(huì)為在啟動(dòng)時(shí)隨機(jī)為一個(gè)節(jié)點(diǎn)給定一個(gè)以漫威Marvel人物的名字為之命名,當(dāng)然我們也可以為節(jié)點(diǎn)指定任何我們想指定的名稱。這個(gè)名稱對(duì)于管理ES集群非常重要,我們用它來定位網(wǎng)絡(luò)或集群中的某一節(jié)點(diǎn)。
一個(gè)節(jié)點(diǎn)可以通過指定集群名稱讓它加入某個(gè)集群,默認(rèn)情況下,每個(gè)節(jié)點(diǎn)都會(huì)加入到一個(gè)名為“elasticsearch”的集群中,也就是說,當(dāng)我們?cè)谀骋痪W(wǎng)絡(luò)下啟動(dòng)一定數(shù)量的ES節(jié)點(diǎn)時(shí),我們認(rèn)為他們可以相互發(fā)現(xiàn)同一網(wǎng)絡(luò)下的其他節(jié)點(diǎn)。
在單集群下,我們可以有任意數(shù)量的節(jié)點(diǎn),如果當(dāng)前網(wǎng)絡(luò)下沒有任何ES節(jié)點(diǎn),那么在啟動(dòng)節(jié)點(diǎn)后,當(dāng)前節(jié)點(diǎn)會(huì)默認(rèn)形成一個(gè)單節(jié)點(diǎn)集群,名稱為“elasticsearch”。
索引(Index)
一個(gè)索引是一組具有相似特性的文檔的集合。例如,可以為客戶數(shù)據(jù)(customer data)建立索引一個(gè)索引,也可以為產(chǎn)品目錄(product catalog)建立另一個(gè)索引,還可以為訂單數(shù)據(jù)(order data)建立另一個(gè)索引。一個(gè)索引由它的名稱唯一標(biāo)識(shí)(必須所有字母為小寫字母),這個(gè)名稱會(huì)在進(jìn)行索引(indexing)、搜索(search)、修改(update)和刪除(delete)操作的時(shí)候使用。
在一個(gè)單集群下,我們可以定義任意多的索引。
類型(Type)
在一個(gè)索引下,我們可以定義一個(gè)或多個(gè)類型(types)。一個(gè)類型是一個(gè)索引邏輯分類或分區(qū)(category/partition),而分類或分區(qū)的劃分方法由我們自己決定。通常情況下,我們會(huì)為具有相類似的字段的一組文檔定義類型。比如,如果我們運(yùn)行一個(gè)博客平臺(tái),所有的數(shù)據(jù)都使用同一索引,我們?yōu)橛脩魯?shù)據(jù)定義一種類型,為博客數(shù)據(jù)定義另一種類型,同時(shí)為評(píng)論數(shù)據(jù)定義另一種類型。
文檔(Document)
一個(gè)文檔是一個(gè)可以被索引的基本信息單元。比如,一個(gè)用戶可以是一個(gè)文檔,一個(gè)產(chǎn)品可以是一個(gè)文檔,一個(gè)訂單同樣也可以成為一個(gè)文檔。這個(gè)文檔以JSON格式表示。
分片與副本(Shards & Replicas)
一個(gè)索引可能會(huì)存儲(chǔ)大量數(shù)據(jù)從而超過單個(gè)節(jié)點(diǎn)硬件的限制。例如,單個(gè)索引可能會(huì)有上億的文檔占用1TB的磁盤空間,這對(duì)于單個(gè)節(jié)點(diǎn)來說太大,同時(shí)使用單個(gè)節(jié)點(diǎn)也會(huì)是搜索變慢。
為了解決這個(gè)問題,ES提供了一種分片(shard)能力,讓我們將一個(gè)索引切分成片。當(dāng)我們創(chuàng)建一個(gè)索引時(shí),我們可以為它指定分片的數(shù)量。每個(gè)分片自己都能獨(dú)立工作,并且存在與集群的任一節(jié)點(diǎn)中。
分片的重要性主要體現(xiàn)在以下兩個(gè)原因:
- 可以水平分割或擴(kuò)展內(nèi)容體量。
- 可以分布式和并行的方式在多個(gè)分片上進(jìn)行操作(多個(gè)節(jié)點(diǎn))從而提高性能和吞吐量。
一個(gè)分片是如何散發(fā)的,如何將它的文檔聚合并返回個(gè)查詢是對(duì)用戶透明的,這個(gè)過程完全由ES來管理。
在網(wǎng)絡(luò)或云的環(huán)境下,錯(cuò)誤可以在任何時(shí)候發(fā)生,當(dāng)一個(gè)分片或節(jié)點(diǎn)因?yàn)槟撤N原因下線或消失時(shí),一個(gè)錯(cuò)誤恢復(fù)機(jī)制就非常重要。為了解決這個(gè)問題,ES讓我們可以為一個(gè)索引分片創(chuàng)建一個(gè)或多個(gè)拷貝,這個(gè)拷貝稱作副本分片,簡(jiǎn)稱為副本。
副本的重要性主要體現(xiàn)在以下兩個(gè)原因:
- 當(dāng)一個(gè)分片或者節(jié)點(diǎn)出錯(cuò)時(shí),集群任然可用。正因如此,我們會(huì)發(fā)現(xiàn)一個(gè)分片副本從來不會(huì)在它的原始分片或主分片所在的節(jié)點(diǎn)出現(xiàn)。
- 橫向擴(kuò)展搜索體量和吞吐量,因?yàn)樗阉骺梢栽谒懈北旧喜⑿袌?zhí)行。
總之,每個(gè)索引都可以分為多個(gè)分片,一個(gè)索引也可以被復(fù)制到零個(gè)或多個(gè)副本。一旦發(fā)生復(fù)制,每個(gè)索引都會(huì)有主分片(primary shards)和多個(gè)副本分片(replica shards)。分片數(shù)和副本數(shù)可以在一個(gè)索引創(chuàng)建時(shí)指定。當(dāng)索引創(chuàng)建以后,可以動(dòng)態(tài)的改變副本數(shù),但是不能改變分片數(shù)。
默認(rèn)情況下,每個(gè)ES索引都有5個(gè)主分片(primary shards)和1個(gè)副本(replica),也就是說當(dāng)我們的集群有兩個(gè)節(jié)點(diǎn)時(shí),我們的索引會(huì)有5個(gè)主分片和另外5個(gè)副本分片,也就是說每個(gè)索引有總共10個(gè)分片。
注意
每個(gè)ES分片都是一個(gè)Lucene索引。對(duì)于單個(gè)Lucene索引,文檔的最大數(shù)有一個(gè)限制,2,147,483,519。即(= Integer.MAX_VALUE - 128)。可以通過
_cat/shards來查看。
Each Elasticsearch shard is a Lucene index. There is a maximum number of documents you can have in a single Lucene index. As of LUCENE-5843, the limit is 2,147,483,519 (= Integer.MAX_VALUE - 128) documents. You can monitor shard sizes using the _cat/shards api.
參考
參考來源:
https://www.elastic.co/guide/en/elasticsearch/reference/current/_basic_concepts.html
圖片來源:
https://www.youtube.com/watch?v=LDyxijDEqj4
結(jié)束
總結(jié)
以上是生活随笔為你收集整理的ElasticSearch 2 (7) - 基本概念的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Platforms/iPhoneSimu
- 下一篇: _extend用法总结