近實時有兩種意思,一種是從寫入數據到能夠被搜索到有一個小延遲(大概一秒),還有一種就是基於ElasticSearch 進行搜索和分析能夠達到秒級, 下圖來講明一下近實時的效果。數據庫
集羣裏面包含多個節點,每一個屬於那個集羣都是經過一個配置(集羣名稱,默認是elasticSearch)來決定的,對於中小型企業來講,剛開始一個集羣就一個節點很正常。json
集羣裏面的一個節點,節點也有一個名稱,默認是隨機分配的,節點名稱很重要(在運維管理操做的時候),每一個節點默認會去加入一個名叫 elasticsearch 的集羣, 若是直接啓動一堆節點,那麼他們會自動組成一個名爲 elasticsearch 的集羣, 固然一個節點也能夠組成一個 elasticsearch 集羣,只不過狀態是yellow(警告),正常的狀態應該是green(正常),這個在後面會詳細說明爲何會有yellow和green之分。服務器
es中最小的數據單元,它能夠是一條簡單的客戶數據,一條商品分類數據,一條訂單數據,一般用json結構表示,每一個index下的type中,均可以存儲多個document。下面就舉例一個簡單的商品document。數據結構
product document { "product_name":"田園布藝沙發", "product_id":"1", "category_name": "沙發", "category_id": "2" }
一個type裏面能夠有不少個document,就至關於一個表裏面有條記錄是一個意思,在ElasticSearch6.0版本以前一個索引是能夠有多個type的,可是在6.0以後就只能有一個type了。在7.0事後將會徹底拋棄type,爲何type會慢慢的被ElasticSearch移除呢?咱們都把type比喻成一張表,把index比喻成數據庫,可是在數據庫裏面的表都是相互獨立的,各個字段之間互不影響,可是在ElasticSerarch中,多個type裏面若是有相同字段,那麼多個type就會同用同一個字段,也就是說他們並不會區分開來,因此後期就慢慢的將type潛移默化了。下面的例子將會展現document在type裏面是怎麼存儲的(這裏type和document的數據關係,並非表明es裏面數據結構就是這樣,這裏只是演示,瞭解就行)。運維
{ "type":[ { "product_name":"田園布藝沙發", "product_id":"1", "category_name":"布藝沙發", "category_id":"2" }, { "product_name":"田園實木沙發", "product_id":"2", "category_name":"實木沙發", "category_id":"3" } ] }
在6.0版本以前index裏面能夠存多個type,可是在6.0以後就只能存一個type了,這個type裏面又有不少的document。就像是下面這樣(這裏只是體現一個index和type還有document的數據關係,並非表明es裏面數據結構就是這樣,這裏只是演示,瞭解就行) { "index":{ "type":[ { "product_name":"田園布藝沙發", "product_id":"1", "category_name":"布藝沙發", "category_id":"2" }, { "product_name":"田園實木沙發", "product_id":"2", "category_name":"實木沙發", "category_id":"3" } ] } }
elasticsearch
ElasticSearch 中特別重要的一個,先簡單介紹一下什麼是shards,它是一個數據的分片,這裏先大概說明一下,下面就來詳細解釋一下這個shards爲何重要了。分佈式
它的做用就是shard的備份,直接上例子,好比咱們的節點7宕機了,那麼這個節點上面的數據就丟失了沒法獲取該節點上面的數據,這個時候估計大家也猜到,replica的用處了,它就是shard的備份,若是某個主節點宕機了,那麼就會到節點的備份分片replica上面去查詢數據(replica的做用不只僅只有備份,還能夠提升吞吐量等等),一個replica存儲的數據和shard上是同樣的。性能
這個時候就能夠解釋爲何只有單臺服務器時集羣狀態的yellow的了,由於ElasticSearch不容許同一個索引額shard和replace出如今同一臺機器上面,由於這樣若是這臺機器宕機了,那麼就沒法獲取數據了,全部會爆出警告,最低(不發生警告)的集羣配置是2臺服務器,一臺存全部的shard,另外一臺出全部的replace,這就是replace的最重要的做用了。3d