摘要:接著上一篇搭建的環(huán)境繼續(xù)學(xué)習(xí),從概念開始,本篇文章將介紹中的一些重要概念及部分原理性概念,以下內(nèi)容中簡稱為。表示字段,具體指的是中的某一個(gè)數(shù)據(jù)字段??梢栽诠收蠒r(shí)提供備用服務(wù)。
接著上一篇ElasticSearch搭建的環(huán)境繼續(xù)學(xué)習(xí),從概念開始,本篇文章將介紹ElasticSearch中的一些重要概念及部分原理性概念,以下內(nèi)容中簡稱為ES。一、ES部分名詞解釋
1.NRT:英文全稱為Near RrealTime。中文意思為近實(shí)時(shí),從寫入數(shù)據(jù)到可以被搜索到之間有一個(gè)小于1s的延遲,使用ES進(jìn)行搜索和數(shù)據(jù)分析可以達(dá)到秒級(jí)的速度。
注:由于ES寫入數(shù)據(jù)到可以被索引到之間有延遲,所以對(duì)于業(yè)務(wù)中包含有保存冪等性需求時(shí),需要注意; 在寫完之后手動(dòng)執(zhí)行刷新操作,然后再查詢,否則會(huì)可能出現(xiàn)數(shù)據(jù)寫重的情況。
2.cluster:表示由多個(gè)節(jié)點(diǎn)組成的ES集群(常見集群種類:HA,HB,HP,具體可自行查閱資料)。集群有一個(gè)名稱,默認(rèn)是elasticsearch,可以在配置文件中通過cluster.name字段手動(dòng)指定,集群最小節(jié)點(diǎn)數(shù)可以為1個(gè)。
3.node:集群中的節(jié)點(diǎn)。節(jié)點(diǎn)也有自己的名稱,默認(rèn)是隨機(jī)分配的,默認(rèn)情況下,節(jié)點(diǎn)啟動(dòng)之后,會(huì)自動(dòng)去尋找名稱為cluster.name字段所指定的集群。如果在默認(rèn)不修改cluster.name的情況下,啟動(dòng)多個(gè)節(jié)點(diǎn)之后,它們會(huì)自動(dòng)組成一個(gè)ES集群。
4.document:文檔。它是ES中的最小數(shù)據(jù)單元,通常使用JSON數(shù)據(jù)結(jié)構(gòu)表示,每個(gè)index(索引)的type(類型)中,都可以存儲(chǔ)多個(gè)Document。
5.field:表示字段,具體指的是Document中的某一個(gè)數(shù)據(jù)字段。比如學(xué)生信息文檔中的學(xué)號(hào)字段。
6.index:索引。是多個(gè)有相似結(jié)構(gòu)的文檔數(shù)據(jù)的集合,類似于MySQL數(shù)據(jù)庫中的數(shù)據(jù)庫概念。
7.type:類型。表示某個(gè)索引下面的某種相同數(shù)據(jù)結(jié)構(gòu)的結(jié)合。在較低版本的ES中,一個(gè)索引中可以有多個(gè)type,高版本中一個(gè)索引下只能有一個(gè)類型,官方建議每個(gè)索引下最好只有一個(gè)type。如果一個(gè)index下有多個(gè)type,在不同的搜索場(chǎng)景下可能會(huì)相互有影響,比如:一個(gè)索引下面有一個(gè)用于統(tǒng)計(jì)分析的type和一個(gè)用于搜索的type,如果統(tǒng)計(jì)請(qǐng)求比較慢,有可能會(huì)阻塞到查詢請(qǐng)求。
8.shard:每個(gè)index會(huì)被拆分為多個(gè)shard,每個(gè)shard就會(huì)存放這個(gè)index的一部分?jǐn)?shù)據(jù),這此shard會(huì)散落在多臺(tái)服務(wù)器上。有了shard就可以進(jìn)行橫向擴(kuò)展,存儲(chǔ)更多數(shù)據(jù),讓搜索和分析等操作分布到多臺(tái)服務(wù)器上去執(zhí)行,提升吞吐量和性能。shard又分為replica shard和primary shard,每個(gè)shard都是一個(gè)lucene index.
9.replica:每個(gè)服務(wù)器隨時(shí)可能故障或宕機(jī),此時(shí)shard就可以會(huì)丟失,因此可以為每一個(gè)shard創(chuàng)建多個(gè)replica副本。replica可以在shard故障時(shí)提供備用服務(wù)。保證數(shù)據(jù)不丟失或者丟失很少,多個(gè)replica還可以提升搜索操作的吞吐量和性能。
注意: primary shard:建立索引時(shí)一次設(shè)置,不能修改,默認(rèn)5個(gè); replica shard:可隨時(shí)修改,默認(rèn)1個(gè)),默認(rèn)每個(gè)索引10個(gè)shard,5個(gè)primary shard, 5個(gè)replica shard,最小的高可用配置,是2臺(tái)服務(wù)器。二、ES的文檔數(shù)據(jù)格式的優(yōu)點(diǎn)
1.可以提供復(fù)雜的面向?qū)ο蟮臄?shù)據(jù)結(jié)構(gòu);
2.如果不適用ES,使用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,復(fù)雜的對(duì)象只能拍平,放到多個(gè)關(guān)聯(lián)表中,查詢的時(shí)候需要查詢多個(gè)表,而且還得重新組合成復(fù)雜對(duì)象,特別麻煩;
3.基于ES面向文檔的特性,而且提供了倒排索引,所以可以勝任復(fù)雜的查詢和檢索需求;
4.使用傳統(tǒng),流行的文檔對(duì)象來存儲(chǔ),很容易處理;
1.集群健康狀態(tài)
使用_cat相關(guān)api查看,如下:
[root@es-master ~]# curl http://localhost:9200/_cat/health?pretty #返回結(jié)果 1549092107 02:21:47 elasticsearch green 3 3 134 67 0 0 0 0 - 100.0%
可以看出,如果集群中的所有節(jié)點(diǎn)都正常啟動(dòng),整個(gè)集群的狀態(tài)為green;
2.集群的三種狀態(tài)
(1)紅(red):不是所有的primary shard都是active狀態(tài)的,部分索引有數(shù)據(jù)丟失了; (2)黃(yellow):每個(gè)索引的primary shard都是active狀態(tài)的,但是部分replica shard不是active狀態(tài),處于不可用的狀態(tài),此時(shí)可以繼續(xù)使用; (3)綠(green):每個(gè)索引的primary shard和replica shard都是active狀態(tài)的;
集群啟動(dòng)時(shí)狀態(tài)變化過程:
集群啟動(dòng)的時(shí)候,首先會(huì)有某些節(jié)點(diǎn)先啟動(dòng),這些節(jié)點(diǎn)會(huì)被作為主節(jié)點(diǎn),在所有的主節(jié)點(diǎn)未完全啟動(dòng)之前,集群此時(shí)處于red狀態(tài); 當(dāng)主節(jié)點(diǎn)全部啟動(dòng)之后,集群狀態(tài)會(huì)變?yōu)閥ellow狀態(tài); 所有的replica節(jié)點(diǎn)都啟動(dòng)完成之后,集群中的所有節(jié)點(diǎn)都已經(jīng)齊全,此時(shí)集群變?yōu)間reen狀態(tài);
3._cat中的重要api
查看集群中的節(jié)點(diǎn)數(shù)
[root@es-master ~]# curl http://localhost:9200/_cat/nodes?pretty 192.168.199.12 29 95 12 0.00 0.08 0.06 mdi * es-node2 192.168.199.11 41 88 25 0.64 0.75 0.57 mdi - es-node1 192.168.199.11 20 88 25 0.64 0.75 0.57 mdi - es-node3
表示集群中有三個(gè)節(jié)點(diǎn),es-node1,es-node2,es-node3;
查看集群中的分片數(shù)
[root@es-master ~]# curl http://localhost:9200/_cat/shards?pretty student_index 3 p STARTED 1 4.3kb 192.168.199.11 es-node1 student_index 3 r STARTED 1 4.3kb 192.168.199.11 es-node3 student_index 2 p STARTED 2 8.5kb 192.168.199.12 es-node2 student_index 2 r STARTED 2 8.5kb 192.168.199.11 es-node3 student_index 1 r STARTED 1 4.4kb 192.168.199.11 es-node1 student_index 1 p STARTED 1 4.4kb 192.168.199.12 es-node2 student_index 4 p STARTED 1 4.4kb 192.168.199.11 es-node1 student_index 4 r STARTED 1 4.4kb 192.168.199.11 es-node3 student_index 0 p STARTED 0 261b 192.168.199.12 es-node2 student_index 0 r STARTED 0 261b 192.168.199.11 es-node3
表示student_index索引默認(rèn)有10個(gè)分片,5個(gè)primary和5個(gè)replica;
查看集群中的索引列表
[root@es-master ~]# curl http://localhost:9200/_cat/indices?v health status index uuid pri rep docs.count docs.deleted store.size pri.store.size green open .monitoring-es-6-2019.01.27 kXMATwLHShGoGrAhOVPZqg 1 1 39439 432 48.3mb 24.1mb green open .monitoring-kibana-6-2019.01.27 PpgWm9PSRXKU385_pQis2g 1 1 1512 0 1mb 531.7kb green open .elastichq 19vJX4__TcunPjMCfybmdA 5 1 1 0 14kb 7kb green open student_index 8VHSS7wyQIadWBcNWJsGPQ 5 1 5 0 43.9kb 21.9kb green open student VXHrKYNcSRKELb7WSzToCw 5 1 2 0 23.8kb 11.9kb
默認(rèn)展示的是系統(tǒng)索引和自己創(chuàng)建的索引,參數(shù)v表示查看詳細(xì)信息;
_cat還有其他api,但是不是很常用,如果需要,可以通過如下命令查看即可
[root@es-master ~]# curl http://localhost:9200/_cat =^.^= /_cat/allocation /_cat/shards /_cat/nodes /_cat/tasks ...四、ES簡單操作
此處以電商系統(tǒng)商品搜索為例,使用kibana圖形化操作界面,介紹ES的簡單操作。
1.創(chuàng)建
用法:
PUT /index_name/type_name/id {}
例如:創(chuàng)建一個(gè)索引名稱為shop_index,類型為productInfo,id為1的索引
PUT /shop_index/productInfo/1 { "name": "HuaWei Mate8", "desc": "Cheap and easy to use", "price": 2500, "producer": "HuaWei Producer", "tags": [ "Cheap", "Fast" ] }
2.查詢
用法:
GET /index_name/type_name/id
例如:查詢id為1的商品信息
GET /shop_index/productInfo/1 { "_index": "shop_index", "_type": "productInfo", "_id": "1", "_version": 1, "found": true, "_source": { "name": "HuaWei Mate8", "desc": "Cheap and easy to use", "price": 2500, "producer": "HuaWei Producer", "tags": [ "Cheap", "Fast" ] } }
3.修改
方法一:替換,通過ID替換,如果文檔存在,則直接覆蓋
用法:
PUT /index_name/type_name/id {}
例如:將商品價(jià)格修改為2400
PUT /shop_index/productInfo/1 { "name": "HuaWei Mate8", "desc": "Cheap and easy to use", "price": 2400, "producer": "HuaWei Producer", "tags": [ "Cheap", "Fast" ] }
注意:替換某個(gè)文檔時(shí),需要帶著文檔中的所有字段,否則未帶著的字段會(huì)丟失,切記!??!
方法二:通過ID更新部分字段
用法:
POST /index_name/type_name/id/_update {}
例如:將上述商品的價(jià)格改為2200
POST /shop_index/productInfo/1/_update { "doc": { "price": 2200 } }
4.刪除
用法:
DELETE /index_index/type_index/id
例如:刪除id為1的商品記錄:
DELETE /shop_index/productInfo/1
本篇文章簡單介紹了ES的一些重要概念及基本用法,為后續(xù)內(nèi)容做鋪墊,下篇文章將繼續(xù)ES的多種搜索方式!歡迎評(píng)論轉(zhuǎn)發(fā)!
后續(xù)更多文章將更新在個(gè)人小站上,歡迎查看。
另外提供一些優(yōu)秀的IT視頻資料,可免費(fèi)下載!如需要請(qǐng)查看https://www.592xuexi.com
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/73394.html
摘要:原文發(fā)表在我的個(gè)人網(wǎng)站深入理解一基本概念及用法在本系列文章中,我將跟大家一起學(xué)習(xí)的基本用法,探索的各種高級(jí)功能,理解背后的運(yùn)行原理,并最終達(dá)到深入理解靈活使用的目的。下一步深入理解二中間操作流 原文發(fā)表在我的個(gè)人網(wǎng)站:深入理解 Laravel Eloquent(一)——基本概念及用法 在本系列文章中,我將跟大家一起學(xué)習(xí) Eloquent 的基本用法,探索 Eloquent 的各種...
摘要:為什么叫重入鎖呢,我們把它拆開來看就明了了。釋放鎖,每次鎖持有者數(shù)量遞減,直到為止。 相信大家在工作或者面試過程中經(jīng)常聽到重入鎖這個(gè)概念,或者與關(guān)鍵字 synchrozied 的對(duì)比,棧長面試了這么多人,80%的面試者都沒有答對(duì)或沒有答到點(diǎn)上,或者把雙重效驗(yàn)鎖搞混了,哭笑不得。。 那么你對(duì)重入鎖了解有多少呢?今天,棧長幫大家撕開重入鎖的面紗,來見識(shí)下重入鎖的真實(shí)容顏。。 什么是重入鎖 ...
閱讀 2536·2023-04-26 02:47
閱讀 3016·2023-04-26 00:42
閱讀 881·2021-10-12 10:12
閱讀 1389·2021-09-29 09:35
閱讀 1704·2021-09-26 09:55
閱讀 491·2019-08-30 14:00
閱讀 1547·2019-08-29 12:57
閱讀 2366·2019-08-28 18:00