1. 程式人生 > >elasticsearch基本概念

elasticsearch基本概念

近實時 Near Realtime(NRT)

Elasticsearch 是一個近實時的搜尋平臺。這意味著就是當你索引一個文件後,然後可檢索僅有輕微延遲(一般都是一秒)。

叢集(Cluster)

elasticesearh 提供至少一臺節點服務的叢集,擁有所有資料集,提供聯合索引和檢索能力。
“elasticsearch”是整個叢集的唯一名字。而這個名字的重要性是如果一個節點想成為叢集中一個節點,那建立節點後只能通過叢集的名字加入這個叢集中。這也確保了你不同環境(生產環境、測試環境、開發環境)不能重複利用同一個叢集名字,否則 會導致“節點”加入錯的環境。
一般來說,我們建立logging-dev,logging-stage,loggin-prod 分別是開發環境,預生成環境,生產環境叢集。
注意它是有效的,完全可以只有一個叢集節點。此外,你也可以有多個獨立叢集,每個叢集都有自己獨特的叢集名稱。

節點(Node)

一個節點是一個伺服器叢集的一部分,儲存您的資料,並參與叢集的索引和搜尋功能。
就像一個叢集,一個節點是由一個名字標識,預設情況下是一個隨機Marvel人物名稱分配給節點在啟動。
如果你不希望預設,您可以定義任何你想要的節點名稱。這個名字最近中重要目的是方便管理,你想確定哪些伺服器在您的網路中哪些節點對應Elasticsearch叢集。
通過叢集名稱,一個節點加入到指定叢集是可配置的。
預設情況下,每個節點設定加入叢集命名elasticsearch,這意味著如果你啟動一個網路上一定數量的節點,並假定他們都可以發現,每—都將自動形成並加入一個叢集名字叫elasticsearch。
在一個叢集中,你可以有儘可能多的節點。
更重要的是,如果在當前網路上,沒有其他elasticsearch叢集,那當啟動新的節點,將會按照預設叢集名字叫elasticsearch

索引(Index)

索引是文件(documents)的集合,擁有其他類似的特點。比如,你可以有客戶資料的索引,產品目錄索引,以及訂單資料的索引。
索引必須是通過唯一的名字(必須所有是小寫字母),當在文件(documents)執行索引、檢索、更新、刪除等操作,需要通過唯一的索引名稱
在一個叢集眾,你可以定義很多你想要的索引

型別(Type)

一個索引,你可以定義一個或者多個型別。
型別是一個邏輯類別/分割槽索引,使用場景是完全取決於你的。
一般來說,型別是為文件定義一組常用欄位。例如,假如 你執行一個部落格平臺,儲存所有資料在一個索引中。而在這個索引中,你可以給使用者資料定義一種型別,部落格資料定義另一種型別,以及評論資料定義其他型別

文件(Document)

文件的基本單元可以被索引的資訊。
比如,你可以有一個文件索引客戶資料,另一個文件索引產品資料,以及另一個索引訂單資料。這個文件是用JSON(JavaScript Object Notation)格式表示的,JSON是一個無處不在的網際網路資料交換格式。
使用索引/型別,你可以儲存任何你想要的文件。
注意,儘管一個文件,物理上存在一個索引,而一個文件實際上必須被索引/分配給內部索引型別。

分割槽&副本(Shards & Replicas)

索引可以儲存大量的資料,可以超過單個節點的硬體限制。
例如,單個索引十億個文件佔用1 TB的磁碟空間可能不適合在磁碟上的一個節點或可能過於緩慢,僅從單個節點搜尋請求服務。
為了解決這個問題,Elasticsearch能夠索引細分成多個塊分割槽
當您建立索引時,您可以簡單地定義你想要的分割槽數量。每個切分本身就是一個全功能和獨立的“指數”,可以託管在叢集中的任何節點。

切分是重要的有兩個主要原因:
- 它允許你水平分割體積/擴充套件內容
- 它允許你分散式和並行化操作在分割槽(可能在多個節點),從而增加效能和吞吐量

分割槽是如何分佈的機制以及其文件是如何聚合回搜尋請求是完全由Elasticsearch管理,作為使用者是透明的。

在網路/雲環境,失敗隨時可以預計,它是非常有用的,強烈推薦分割槽/節點故障轉移機制,以防離線或消失不管出於什麼原因。

為此,Elasticsearch允許你做出一個或多個索引分割槽的複製到所謂的複製分割槽,或簡稱為副本。

副本是重要的有兩個主要原因:
- 它提供高可用的單個分割槽/節點失敗場景。由於這個原因,重要的是要注意,一個複製分割槽是永遠不會分配在同一節點與原始/主分割槽。
- 它允許你擴充套件您的搜尋量/吞吐量,因為搜尋可以在所有副本並行執行。
結論,每個索引可以被分割成多個分割槽。一個索引可以被重複 0(意味沒副本)或者多次。
一旦被重複了,每一個索引將會有很多主分割槽(通過原始分割槽 replica 重複形成的),副本分割槽(主分割槽的副本數)。分割槽和副本數量,在每個索引被建立的時候可以被建立。當索引建立後, 你可以在任何時候動態修改副本數,但是不能修改分割槽資料(建立索引後)
預設的,在elasticsearch中,每個索引被分配5個主分割槽和一個副本,這就意味著,如果在你的叢集中至少有個兩個節點,你的索引將會有5個主分割槽和其他5個副本分割槽(1個完整的副本),因此,每個索引共計有10個分割槽。

注意(Note)

每個elasticsearch 分割槽都是一個lucene索引。 文件最大數量是根據你的一個Lucene 的索引資料。由於LUCENE-5843, 限制 是 2,147,483,519 (= Integer.MAX_VALUE - 128) 個文件,你可以通過_cat/shards api,監控分割槽大小。