面試官常考的MySQL索引(MySQL進階)
966
2025-03-31
elasticsearch ,簡稱es,是面向文檔型的nosql數據庫,一條數據就是一個文檔;在安裝完es后會出現一行字符串you know,for search !,翻譯成正文就是:“你知道的,為了搜索!”,所以es的出現就是為了搜索而生的,
前言
觀看本文章需要你有關系型數據庫mysql的相關知識,因為本文章會將es和mysql做一些比較,熟悉mysql之后理解起來會更容易,學習也更加快速;
1、核心概念目錄表
索引(index)
索引是一組相似文檔的集合,可以理解一個索引就是一個目錄,在這個目錄下有眾多文檔;在新版的ES(6.0以上)中,已經去除了types的概念,所以也可以理解為索引就是一張關系型數據庫的表(table);在新建索引時,索引名稱必須是小寫;es的精髓就是為了提高查詢效率
類型 (type)
在就版本中,type可以理解為關系型數據庫的表,其實在設計初期,是沒有types的概念的,設計es的人為了和關系型數據庫進行關聯,特地加上了types的概念, 但是后來發現沒有這個必要,所以在6.*版本進行弱化,也就說在6.*版本以后,一個索引下只能有一個type,而在7.*以后則去除了type的概念。
并且在存儲的時候,一個索引下的所有type的數據都會存儲在一個文件中,如果一個索引下有多個types,那無疑會降低搜索的效率,所以才會這么急切地要去除type
document(文檔)
代表著es中一條記錄,和關系型數據庫的rows是一樣的, 不同的是,文檔的數據是以json的格式進行表示;只要你的計算機磁盤空間足夠,在一個索引中,你可以存儲無限多的文檔
field(屬性)
field 在關系型數據庫中被稱為字段(column),他倆之間的概念是一樣的,每個field都有自己的數據類型,根據數據類型存儲不同的數據,區別是關系型數據庫必須先定義固定的數據類型和屬性長度,而es可以不設定數據類型,在插入數據時會自動生成對應的數據類型;
mapping(映射)
mapping用來配置屬性的默認值、數據類型、分析器、是否被索引等等,將一個屬性用映射的方式做一些優化,可以提高檢索效率和減少空間占用;
shareds (分片)
在es中, 一個索引下的數據是可以有無限大的,并且 它們都存儲在一個文件中, 但是這有個問題,文件越大,就意味著搜索效率會降低,就需要將一個文件按照一定的規則拆分成多個文件;而分片就是做拆分用的,比如用戶表中有10億條數據,有各種年齡段的用戶,在1 ~ 100歲之間;就可以用分片機制將 這些用戶進行劃分為5個片區,劃分如下
分片1:1-20歲
分片2:21-40歲
分片3:41-60歲
分片4:61-80歲
分片5:81-100歲
es的分片和mysql的分區類型,不同的是mysql不支持分布式分區,而es支持分布式集群分片,也就是說,es允許將不同的分片劃分到不同的集群節點中;
分配(Allocation)
將分片分配給節點的過程,包括分配主分片或者副本,如果是副本,還包含從主分片復制數據的過程,這個過程由master節點完成;
2、系統架構
es是支持集群部署的,默認情況下就是集群環境,只不過,如果只有只有一個主節點的話,是會有單點故障的,也就是說當主節點因為一些原因掛了,那es就無法在提供服務了;所以為了保證es的高可用,一般生產環境下都會部署多個節點,建議一主多從,當主節點宕機后,其他的子節點還可以照樣提供服務,業務也不會受影響;
es選主過程
當es集群發現主節點不存在或者主節點不可用的情況下,就會觸發重新選主的邏輯,選主算法主要有2個
Bully算法
Paxos算法
Leader選舉的基本算法之一。 它假定所有節點都有一個惟一的ID,該ID對節點進行排序。 任何時候的當前Leader都是參與集群的最高id節點,
這種算法雖然簡單,但是缺陷也明顯,如果選出的leader處于不穩定狀態,一旦負載過重會出現假死的情況。例如 Master 負載過重而假死,集群擁有第二大id 的節點被選為 新主,這時原來的 Master 恢復,再次被選為新主,然后又假死…
Paxos算法的原則是任何一個節點都有可能稱為主節點,以下的選主過程只是一個粗略的過程,真實的Paxos算法其實非常復雜,在這里化繁為簡,也是為了方便大家理解;
當節點A發現主節點宕機后,向集群廣播發送自己成為主節點的請求,也就是征求每個節點的意見:“我要成為老大(leader),你們同意不?”
當集群中的節點收到廣播后,給出自己的意見,
當超過半數的節點都同意后,節點A就成為主節點,比如集群中有3個節點,節點A發送廣播后,只要有其他任何一個節點同意了,節點A就升級成主節點,不需要全部都同意;
副本分片的分配方式
es的數據分為主分片和副本分片,主分片都存儲在master節點中,但是副本分片都在其他的node節點上, 這是因為es要保證高可用,萬一master節點掛了,其他的子節點還照樣可以提供查詢數據的服務;
Elasticsearch MySQL 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。