ES學習之路

2021-09-24 09:21:11 字數 3487 閱讀 7025

es目標

(1)從零開始,逐步搭建出乙個大型可擴充套件、高效能、監控體系完善、管理體系健全的分布式集群

(2)開發複雜的es搜尋/分析系統之外,從零開始搭建乙個分布式的大型es集群,並制定完善的監控,運維,管理,優化等方案

主要目標

兩個應用領域    垂直搜尋引擎,實時資料分析

什麼是elasticsearch?

elasticsearch 功能和使用場景

(1)分布式的搜尋引擎和資料分析引擎

(2)全文檢索,結構化檢索,資料分析

(3)對海量資料進行近實時的處理

(1)可以作為乙個大型分布式集群(數百台伺服器)技術,處理pb級資料,服務大公司;也可以執行在單機上,服務小公司

(2)elasticsearch不是什麼新技術,主要是將全文檢索、資料分析以及分布式技術,合併在了一起,才形成了獨一無二的es;lucene(全文檢索),商用的資料分析軟體(也是有的),分布式資料庫(mycat)

(3)對使用者而言,是開箱即用的,非常簡單,作為中小型的應用,直接3分鐘部署一下es,就可以作為生產環境的系統來使用了,資料量不大,操作不是太複雜

(4)資料庫的功能面對很多領域是不夠用的(事務,還有各種聯機事務型的操作);特殊的功能,比如全文檢索,同義詞處理,相關度排名,複雜資料分析,海量資料的近實時處理;elasticsearch作為傳統資料庫的乙個補充,提供了資料庫所不不能提供的很多功能

elasticsearch名詞解釋

(1)near realtime(nrt):近實時,兩個意思,從寫入資料到資料可以被搜尋到有乙個小延遲(大概1秒);基於es執行搜尋和分析可以達到秒級

(2)cluster:集群,包含多個節點,每個節點屬於哪個集群是通過乙個配置(集群名稱,預設是elasticsearch)來決定的,對於中小型應用來說,剛開始乙個集群就乙個節點很正常

(3)node:節點,集群中的乙個節點,節點也有乙個名稱(預設是隨機分配的),節點名稱很重要(在執行運維管理操作的時候),預設節點會去加入乙個名稱為「elasticsearch」的集群,如果直接啟動一堆節點,那麼它們會自動組成乙個elasticsearch集群,當然乙個節點也可以組成乙個elasticsearch集群

(4)document&field:文件,es中的最小資料單元,乙個document可以是一條客戶資料,一條商品分類資料,一條訂單資料,通常用json資料結構表示,每個index下的type中,都可以去儲存多個document。乙個document裡面有多個field,每個field就是乙個資料字段。

document            行

type                表

index                庫

elasticsearch  增加,刪除,修改基本語法

(1)快速檢查集群的健康狀況  get /_cat/health?v

(1)新增商品:新增文件,建立索引

put /index/type/id

put /ecommerce/product/1

get /ecommerce/product/1

}(3)修改商品:替換文件

put /ecommerce/product/1

, "created": true

}(4)修改商品:更新文件

post /ecommerce/product/1/_update}}

(5)刪除商品:刪除文件

delete /ecommerce/product/1

}//再次get 資料室查不到的

elasticsearch對複雜分布式機制的透明隱藏特性

shard負載均衡(舉例,假設現在有3個節點,總共有25個shard要分配到3個節點上去,es會自動進行均勻分配,以保持每個節點的均衡的讀寫負載請求)

elasticsearch的垂直擴容與水平擴容

垂直擴容:採購更強大的伺服器,成本非常高昂,而且會有瓶頸,假設世界上最強大的伺服器容量就是10t,但是當你的總資料量達到5000t的時候,你要採購多少臺最強大的伺服器啊

水平擴容:業界經常採用的方案,採購越來越多的普通伺服器,效能比較一般,但是很多普通伺服器組織在一起,就能構成強大的計算和儲存能力

普通伺服器:1t,1萬,100萬

強大伺服器:10t,50萬,500萬

master節點

(1)建立或刪除索引

(2)增加或刪除節點

1、shard&replica機制再次梳理

(1)index包含多個shard

(2)每個shard都是乙個最小工作單元,承載部分資料,lucene例項,完整的建立索引和處理請求的能力

(3)增減節點時,shard會自動在nodes中負載均衡

(4)primary shard和replica shard,每個document肯定只存在於某乙個primary shard以及其對應的replica shard中,不可能存在於多個primary shard

(5)replica shard是primary shard的副本,負責容錯,以及承擔讀請求負載

(6)primary shard的數量在建立索引的時候就固定了,replica shard的數量可以隨時修改

(7)primary shard的預設數量是5,replica預設是1,預設有10個shard,5個primary shard,5個replica shard

(8)primary shard不能和自己的replica shard放在同乙個節點上(否則節點宕機,primary shard和副本都丟失,起不到容錯的作用),但是可以和其他primary shard的replica shard放在同乙個節點上

2、**單node環境下建立index是什麼樣子的

(1)單node環境下,建立乙個index,有3個primary shard,3個replica shard

(2)集群status是yellow

(3)這個時候,只會將3個primary shard分配到僅有的乙個node上去,另外3個replica shard是無法分配的

(4)集群可以正常工作,但是一旦出現節點宕機,資料全部丟失,而且集群不可用,無法承接任何請求

put /test_index

}

es6學習之路(3) 解構賦值

es6 允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構 destructuring 本質上,這種寫法屬於 模式匹配 只要等號兩邊的模式相同,左邊的變數就會被賦予對應的值 1,陣列 let foo,bar baz 1,2 3 foo 1 foo 1 bar 2 baz 3 let...

我的ES6學習之路(一)

強烈推薦 阮一峰寫的 ecmascript6入門 let和const命令 let命令 let用於宣告變數,用法和var相似,但是不完全相同,有以下幾點區別 let命令只在當前作用域中有效 let不會發生 變數提公升 的現象,變數一定要宣告後在使用他,否則會報錯。問題 es6支援es5 但是如果發生以...

ES6學習之路1 變數的宣告

它是variable的簡寫,可以理解成變數的意思。在es6之前,js宣告變數都是採用的var。例項1 var str hello world console.log str hello world 例項2 var a 2 if true console.log a 3例項3 for var i 0 ...