1、文檔 1)ElasticSearch是面向文檔的,文檔是所有可搜索數據的最小單位。例如: a)日誌文件中的日誌項; b)一張唱片的詳細信息; c)一篇文章中的具體內容; 2)在ElasticSearch中,文檔會被序列化成Json格式: a)Json對象是由欄位組成的; b)每個欄位都有對應的字 ...
1、文檔
1)ElasticSearch是面向文檔的,文檔是所有可搜索數據的最小單位。例如:
a)日誌文件中的日誌項;
b)一張唱片的詳細信息;
c)一篇文章中的具體內容;
2)在ElasticSearch中,文檔會被序列化成Json格式:
a)Json對象是由欄位組成的;
b)每個欄位都有對應的欄位類型(如:字元串、數值、日期類型等);
3)每個文檔都有一個唯一的ID(Unique ID)
a)可以自己指定此ID;
b)也可以通過ElasticSearch自動生成;
4)我們可以將文檔理解成關係型資料庫中的一條數據記錄,一條記錄包含了一系列的欄位。
5)Json文檔的格式不需要預先定義
a)欄位的類型可以指定或者由ElasticSearch自動推算;
b)Json支持數組、支持嵌套,如下圖所示:
6)每一個文檔中都包含有一份元數據,元數據的作用主要是用來標註文檔的相關信息,如:
a)_index:文檔所屬的索引名;
b)_type:文檔所屬的類型名(從7.0開始,每一個索引只能創建一個Type:_doc,在此之前一個索引是可以設置多個Type的);
c)_id:文檔的Unqie Id;
d)_source:文檔的原始Json數據;
e)_version:文檔的版本信息;
f)_score:文檔的相關性算分;
2、索引(Index)
1)索引指的就是一類文檔的集合,相當於文檔的容器。
a)索引體現了邏輯空間的概念,每個索引都有自己的Mapping定義,用來定義所包含的文檔的欄位名和欄位類型;
b)索引中的數據(文檔)分散在Shard(分片)上,Shard體現了物理空間的概念;
2)索引的Mapping與Setting:
a)Mapping定義文檔欄位的類型;
b)Setting定義不同的數據分佈;
3)索引的含義:
a)一般說“索引文檔到ElasticSearch的索引中”,前面的索引指的是一個動詞的含義,也就是保存一個文檔到ElasticSearch中。後面的索引是指在ElasticSearch集群中,可以創建很多個不同的索引;
b)索引分為:B樹索引和倒排索引,而倒排索引在ElasticSearch中是非常重要的;
3、ElasticSearch與RDBMS的代入理解與類比如下:
兩者相對比,若對數據進行全文檢索,以及進行算分時,ElasticSearch更加合適;當涉及的數據事務比較高時,那RDBMS更加合適。在實際生產中,一般是兩者進行結合使用。
4、集群
ElasticSearch集群實際上是一個分散式系統,而分散式系統需要具備兩個特性:
1)高可用性
a)服務可用性:允許有節點停止服務;
b)數據可用性:部分節點丟失,不會丟失數據;
2)可擴展性
隨著請求量的不斷提升,數據量的不斷增長,系統可以將數據分佈到其他節點,實現水平擴展;
ElasticSearch的集群通過不同的名字來進行區分,預設名字“elasticsearch”;
可以通過配置文件修改或者命令行修改:-E cluster.name=test
一個集群中可以有一個或者多個節點;
5、節點
1)節點是什麼?
a)節點是一個ElasticSearch的實例,其本質就是一個Java進程;
b)一臺機器上可以運行多個ElasticSearch實例,但是建議在生產環境中一臺機器上只運行一個ElasticSearch實例;
2)每個節點都有名字,可以通過配置文件進行配置,也可以通過命令行進行指定,如:-E node.name=node1
3)每個節點在啟動之後,會被分配一個UID,保存在data目錄下;
4)Master-Eligible【有資格、勝任者】 Node與Master Node的說明:
a)每個節點啟動之後,預設就是一個Master Eligible節點,當然可以在配置文件中將其禁止,node.master:false
b)Master-Eligible Node可以參加選主流程,成為Master Node;
c)當第一個節點啟動時,它會將其選舉為Master Node;
d)每個節點都保存了集群狀態,但只有Master Node才能修改集群的狀態,包括如下:
所有的節點信息;
所有的索引和其相關的Mapping與Setting信息;
分片的路由信息;
5)Data Node與Coordinating【協調、整合】 Node的說明:
a)Data Node:可以保存數據的節點,負責保存分片數據,在數據擴展上起到至關重要的作用;
b)Coordinating Node:它通過接受Rest Client的請求,會將請求分發到合適的節點,最終將結果彙集到一起,再返回給Client;
每個節點都預設起到Coordinating Node的職責;
6)Hot Node(熱節點)與Warm Node(冷節點)的說明:
Hot Node:有更好配置的節點,其有更好的資源配置,如磁碟吞吐、CPU速度;
Warm Node:資源配置較低的節點;
7)Machine Learning Node:負責機器學習的節點,常用來做異常檢測;
8)配置節點類型
每個節點在啟動時,會讀取elasticsearch.yml配置文件,來確定當前節點扮演什麼角色。在生產環境中,應該將節點設置為單一的角色節點,這樣可以有更好的性能,更清晰的職責,可以針對節點的不同給予不能的機器配置。
6、分片
1)Primary Shard(主分片)
可以解決數據水平擴展的問題,通過主分片,可以將數據分佈到集群內的所有節點之上。
a)一個主分片是一個運行的Lucene的實例;
註意:一個節點對應一個ES實例;
一個節點可以有多個index(索引);
一個index可以有多個shard(分片);
一個分片是一個lucene index(此處的index是lucene自己的概念,與ES的index不是一回事);
b)主分片數是在索引創建時指定,後續不允許修改,除非Reindex;
2)Replica Shard(副本)
可以解決數據高可用的問題,它是主分片的拷貝。
a)副本分片數可以動態調整;
b)增加副本數,在一定程度上可以提高服務的可用性;
3)分片的設定
對於生產環境中分片的設定,需要提前做好容量規劃,因為主分片數是在索引創建時預先設定的,後續無法修改。
a)分片數設置過小
導致後續無法增加節點進行水平擴展。
導致分片的數據量太大,數據在重新分配時耗時;
b)分片數設置過大
影響搜索結果的相關性打分,影響統計結果的準確性;
單個節點上過多的分片,會導致資源浪費,同時也會影響性能;
7、ElasticSearch健康狀況的查看
1)Green:主分片與副本都正常分配;
2)Yellow:主分片全部正常分配,有副本分片未能正常分配;
3)Red:有主分片未能分配;
8、總結
通過上面介紹,我們可以知道,索引與文檔更偏向於開發人員的視角,屬於邏輯上的一種概念;節點與分片更偏向於運維人員的視角,屬於物理上的一種概念。
大家可關註我的公眾號
知識學習來源:《Elasticsearch核心技術與實戰》