新棟BOOK教你學elasticsearch(一)-基本概念

1、首先必需要掌握如下4個數據結構的基本概念。node

一、索引(index)數據庫

咱們已經有了關係型數據庫的基礎,如今能夠用類比理解。elasticsearch的索引,你就能夠理解爲是一張表。記住這裏的‘索引’是名詞。後續咱們操做的時候,好比咱們把一條數據索引發來,就是指動詞。json

二、文檔(document)服務器

一樣用類比理解,文檔是傳統關係型數據表中的一條記錄。也就是elasticsearch存儲的主要實體。數據結構

三、文檔類型app

就是指這條記錄,也即這個文檔是什麼類型的。好比 User類型、Order類型。這裏的類型是指業務類型。畢竟你存的都是業務上面的數據實體。同一個索引裏面能夠包含不一樣的文檔類型,好比下面這裏的post帖子,user用戶,就是存儲在一個索引裏面的兩種類型。post和user兩種類型的字段個數能夠不相同,可是若是兩種類型裏面含有相同的字段名稱,好比name,那麼這個name的字段類型必須一致,即都必須爲string類型。elasticsearch

1. {
  2.   "mappings":{
  3.     "post":{
  4.       "properties":{
  5.         "id":{"type":"long","store":"yes"},
  6.         "name":{"type":"string","store":"yes"},
  7.         "content":{"type":"string","store":"no"}
  8.       }
  9.     },
  10.     "user":{
  11.       "properties":{
  12.         "id":{"type":"long","store":"yes"},
  13.         "name":{"type":"string","store":"yes"},
  14.         "age":{"type":"integer","store":"no"}
  15.       }
  16.     }
  17.   }
  18. }
  1.  

四、映射(mapping)post

就是數據結構,好比建立傳統關係型數據庫表的時候,要有一份表結構描述的文本。就是指這個。映射可以讓elasticsearch知道如何處理文檔。例如上面的mapping描述,告訴es要如何對待這些文檔。code

 

2、其次,再掌握elasticsearch集羣相關的基本概念索引

一、節點(node)

就是指集羣(cluster)中的每一個獨立的服務器。

二、分片(shard)

一個索引的數據,散落在不一樣的分片上。這些分片分別在不一樣的節點上。數據量大,處理能力不足,沒法快速響應客戶端的請求,一個節點不夠,就會涉及到分片。

三、副本(replica)

一個分片的精確複製。每一個分片能夠有零個或多個副本。副本,或者叫作副本分片,那麼也就對應有一個主分片,主分片負責索引的操做。

1. "settings": {
  2.     "number_of_shards": "32",
  3.     "number_of_replicas": "1"
  4.   },

 

上面這段定義,表明有32個分片,每一個分片有1個副本。以下圖:

另外集羣中Index TPS,Search TPS與副本數的關係,以下:

集羣寫入文檔TPS與副本數正相關,查詢TPS與副本數無關。

舉例:

1分鐘向集羣寫入1000個文檔:

       當索引有0個副本:集羣寫入文檔次數爲1000,Index TPS爲1000/60.

       當索引有1個副本:集羣寫入文檔次數爲2000,Index TPS爲2000/60.

       當索引有2個副本:集羣寫入文檔次數爲3000,Index TPS爲3000/60.

1分鐘查詢1000次:

       當索引有0個副本:search TPS爲 1000/60.

       當索引有1個副本:search TPS爲 1000/60.

 

副本的數量(number_of_replicas)在建立索引以後,在集羣裏面是能夠調整的。只要你願意,同時資源又充足的條件下,你能夠刪除和添加副本。可是分片的數量(number_of_shards),就不能這樣來操做了。一旦建立好索引,再想更改分片數量,只有一個辦法,那就是建立另外一個索引,並從新索引數據。

相關文章
相關標籤/搜索