Elasticsearch隨筆

什么是ElasticSearch

官方定義是ElasticSearch是一個(gè)基于Lucene library的分布式搜索引擎来累。ElasticSearch的開發(fā)者Shay Banon局义,最開始創(chuàng)建ElasticSearch的目的就是提供一個(gè)分布式的搜索解決方案鸵鸥。隨著ES的發(fā)展痊远,ES功能越來越豐富,ES應(yīng)用越來越廣泛绪氛,ES在很多場(chǎng)景下實(shí)際被作為一種數(shù)據(jù)庫存儲(chǔ)方案楞黄,實(shí)現(xiàn)數(shù)據(jù)庫存儲(chǔ)功能,將其理解為帶有強(qiáng)大搜索功能和快速讀取功能的高可用分布式文檔型非關(guān)系型數(shù)據(jù)庫(nosql)更為全面句旱,非關(guān)系型數(shù)據(jù)庫有很多種阳藻,采用ES作為解決方案的往往看重其強(qiáng)大的查詢分析和全文搜索能力。

ES與Lucene關(guān)系

Lucene是目前最為流行和成熟的搜索庫谈撒,提供了核心的index和search功能腥泥,但是只是對(duì)開發(fā)人員提供了接口,沒有提供終端使用的接口啃匿,并且只是一個(gè)單機(jī)的本地解決方案蛔外。ElasticSearch基于Lucene并且對(duì)Lucene提供了豐富的擴(kuò)展,ES 為Lucene提供了分布式溯乒,高可用解決方案夹厌,實(shí)現(xiàn)了 數(shù)據(jù)高可用(數(shù)據(jù)備份與恢復(fù),數(shù)據(jù)多節(jié)點(diǎn)備份)服務(wù)高可用(分布式裆悄,避免單機(jī)故障矛纹,提供故障恢復(fù)功能),并且提供了基于restful的json的接口方便數(shù)據(jù)的查詢和索引光稼。

分布式存儲(chǔ)和查詢

ES index 是一個(gè)邏輯概念或南,由多個(gè)node上的多個(gè)分片構(gòu)成,用戶針對(duì)某個(gè)index數(shù)據(jù)存儲(chǔ)并不是只存儲(chǔ)在一個(gè)node上艾君,實(shí)際會(huì)被路由到不同node節(jié)點(diǎn)采够,而是查詢時(shí)將不同node數(shù)據(jù)匯總返回給用戶,可以簡單理解為冰垄,關(guān)系型數(shù)據(jù)庫水平分表蹬癌。

對(duì)ES的分布式查詢可以簡單理解為一個(gè)函數(shù)式編程map-reduce過程。用戶發(fā)出search請(qǐng)求給某個(gè)節(jié)點(diǎn),該節(jié)點(diǎn)將請(qǐng)求廣播給不同的data node逝薪,data node接到請(qǐng)求后在相應(yīng)的分片進(jìn)行查詢操作(相當(dāng)于map過程)伴奥,然后將各個(gè)節(jié)點(diǎn)的查詢結(jié)果發(fā)送到到協(xié)調(diào)節(jié)點(diǎn)進(jìn)行排序聚合等操作(相當(dāng)于reduce 過程)

分布式存儲(chǔ)和分布式查詢對(duì)終端用戶來說是透明的,但是如果需要做性能調(diào)優(yōu)需要對(duì)這些深層概念做一些了解是很有幫助的

分布式使得在大數(shù)據(jù)量面前可以通過分片降低每個(gè)分片的檢索規(guī)模翼闽、存儲(chǔ)規(guī)模,并且可以并行檢索來提升檢索效率洲炊。

基于關(guān)系型數(shù)據(jù)庫的ES使用方案

ES 處理領(lǐng)域模型對(duì)象之間復(fù)雜關(guān)系并不擅長感局,而關(guān)系型數(shù)據(jù)庫對(duì)領(lǐng)域模型對(duì)象的抽象建模相對(duì)方便和成熟,ORM建模目前已經(jīng)很成熟暂衡。結(jié)合關(guān)系型數(shù)據(jù)庫領(lǐng)域建模的優(yōu)點(diǎn)询微,利用 ES 查詢速度快、查詢分析功能強(qiáng)大的特點(diǎn)狂巢,可以將ES作為數(shù)據(jù)緩存和數(shù)據(jù)查詢接口使用撑毛。先將重要的數(shù)據(jù)寫入關(guān)系數(shù)據(jù)庫,然后再索引到ES中唧领,查詢操作相關(guān)接口直接hit到ES中藻雌,將查詢壓力放在ES這個(gè)緩存(代理)中,既利用了ES強(qiáng)大的查詢功能斩个,又結(jié)合了關(guān)系型數(shù)據(jù)庫的可靠性和豐富的數(shù)據(jù)描述能力胯杭。使用的數(shù)據(jù)場(chǎng)景是應(yīng)用場(chǎng)景是讀多寫少。這種方案的核心思想是將ES看成廣義的緩存和查詢代理受啥。

ES刪除與查詢?cè)砑皩?duì)應(yīng)性能優(yōu)化方案

ES讀取效率很高做个,但插入和刪除會(huì)影響ES的查詢效率,查詢和寫入的主體segment是不可變的滚局,刪除并不是真正的刪除居暖,而是在.del文件插入一條刪除記錄,在實(shí)際查詢中過濾掉del文件中刪除記錄再返回給用戶藤肢,實(shí)際等于求segment del文兩者的交集太闺,增加了查詢的負(fù)擔(dān)。在ES(Lucene)中沒有真正的更新操作谤草,更新是由刪除和新建兩個(gè)操作構(gòu)成跟束。

ES中刪除的數(shù)據(jù)只有在段合并的時(shí)候才能真正的物理刪除,但是段合并是一個(gè)特別耗時(shí)的操作丑孩,要謹(jǐn)慎操作冀宴。比較好的做法是按照時(shí)間或者某種業(yè)務(wù)邏輯將不同類型的數(shù)據(jù)分index存儲(chǔ),當(dāng)達(dá)到一定條件直接刪除(冷凍)對(duì)應(yīng)index温学,比如logs日志按照天分索引略贮,超過15天自動(dòng)刪除對(duì)應(yīng)索引。多索引方案使得查詢定義更加方便靈活,同時(shí)刪除和查詢影響的范圍變小了(只是某個(gè)index受到影響)逃延,merge時(shí)也更加方便了览妖,可以分時(shí)段分業(yè)務(wù)具體定義merge策略。

Lucene index 與ES分片的關(guān)系

lucence index 是實(shí)際存在的文件揽祥,其中包含多個(gè)segment段文件讽膏,segment是實(shí)際寫入和查詢的主體,index提供實(shí)際的讀寫接口拄丰。
一個(gè)ES分片府树,相當(dāng)于一個(gè)完整Lucene index,包含完整的lucence引擎料按。ES實(shí)際上是將分布在不同的node不同Lucene實(shí)例(分片)統(tǒng)一協(xié)調(diào)管理奄侠,實(shí)現(xiàn)分布式存儲(chǔ)和查詢,提供更方便的存儲(chǔ)和查詢接口载矿,提供功能擴(kuò)展如(agg查詢)垄潮,提供容錯(cuò)性管理,故障恢復(fù)等分布式系統(tǒng)通常提供的服務(wù)闷盔,提供方便的api 監(jiān)控群集狀態(tài)弯洗,提供鏡像恢復(fù)機(jī)制,提供負(fù)載均衡機(jī)制馁筐。

ES高可用實(shí)現(xiàn)方案

ES實(shí)現(xiàn)了自己的一套一致性算法(當(dāng)時(shí)raft算法還沒出現(xiàn))涂召,雖然在部分場(chǎng)景會(huì)有缺陷,但是在實(shí)際使用中表現(xiàn)和強(qiáng)大敏沉,ES的一致性算法目前看在往raft(paxos)算法靠攏果正,也是通過leader選舉機(jī)制,數(shù)據(jù)副本機(jī)制盟迟,數(shù)據(jù)同步機(jī)制秋泳,來保證系統(tǒng)的一致性,高可用性攒菠。

Filter緩存實(shí)現(xiàn)

ES filter緩存并不是緩存整個(gè)search迫皱,而是針對(duì)每個(gè)filter生成一個(gè)bitset數(shù)據(jù)結(jié)構(gòu)(簡單理解為0, 1 數(shù)組)辖众,下次有對(duì)應(yīng)filter的查詢就不用訪問倒排索引了卓起,可以直接訪問對(duì)應(yīng)bitset。Lucene 負(fù)責(zé)計(jì)算構(gòu)建bitSet凹炸, ES 通過cache對(duì)象來緩存bitSet戏阅。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市啤它,隨后出現(xiàn)的幾起案子奕筐,更是在濱河造成了極大的恐慌舱痘,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件离赫,死亡現(xiàn)場(chǎng)離奇詭異芭逝,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)渊胸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門旬盯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人翎猛,你說我怎么就攤上這事瓢捉。” “怎么了办成?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長搂漠。 經(jīng)常有香客問我迂卢,道長,這世上最難降的妖魔是什么桐汤? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任而克,我火速辦了婚禮,結(jié)果婚禮上怔毛,老公的妹妹穿的比我還像新娘员萍。我一直安慰自己,他們只是感情好拣度,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布碎绎。 她就那樣靜靜地躺著,像睡著了一般抗果。 火紅的嫁衣襯著肌膚如雪筋帖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天冤馏,我揣著相機(jī)與錄音日麸,去河邊找鬼。 笑死逮光,一個(gè)胖子當(dāng)著我的面吹牛代箭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播涕刚,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼嗡综,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了副女?” 一聲冷哼從身側(cè)響起蛤高,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤蚣旱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后戴陡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體塞绿,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年恤批,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了异吻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡喜庞,死狀恐怖诀浪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情延都,我是刑警寧澤雷猪,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站晰房,受9級(jí)特大地震影響求摇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜殊者,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一与境、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧猖吴,春花似錦摔刁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至党窜,卻和暖如春趁俊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背刑然。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國打工寺擂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人泼掠。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓怔软,卻偏偏與公主長得像,于是被迫代替她去往敵國和親择镇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子挡逼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容