Elastic Search 特點(diǎn)
Elastic Search 可能是是當(dāng)下最火的搜索引擎中間件了讼渊。為什么這么火呢?主要是因?yàn)樗袔状蠼^藝:
- 快速尊剔。無論什么時(shí)候爪幻,你需要向 ES 查詢你的數(shù)據(jù),都能夠在你還沒有反應(yīng)過來的時(shí)候须误,把查詢的結(jié)果送到你面前挨稿。堪稱一個(gè)快如閃電京痢。
- 靈活奶甘。ES 就像一個(gè)大胃王,不管是數(shù)字祭椰、文本臭家、地理信息類型數(shù)據(jù),也不管是結(jié)構(gòu)化的還是非結(jié)構(gòu)化的數(shù)據(jù)方淤,ES 統(tǒng)統(tǒng)都不在話下钉赁,都能夠索引并進(jìn)行查詢分析。并且依賴 ES 強(qiáng)大的查詢語言携茂,靈活性完全可以和 SQL 相提并論你踩。
- 穩(wěn)定。通過一臺(tái)機(jī)器處理 1T 的數(shù)據(jù)和通過 200 臺(tái)機(jī)器處理
100T 的數(shù)據(jù)在效率上沒有大的差別。當(dāng)你的數(shù)據(jù)快速增長(zhǎng)的時(shí)候带膜,加服務(wù)器就好了吩谦。隔端時(shí)間掛掉一臺(tái)服務(wù)器對(duì) ES 來說根本就像撓癢癢,數(shù)據(jù)完整性膝藕,處理的效率用戶不會(huì)有不同感受逮京。如果服務(wù)器全掛了?呃束莫,那你應(yīng)該換個(gè)好運(yùn)維了。 - 簡(jiǎn)單草描。ES 架構(gòu)簡(jiǎn)單览绿,無論是部署一個(gè)單節(jié)點(diǎn)的 ES 還是幾百臺(tái)機(jī)器的一個(gè)集群,都可以很容易的完成穗慕。除了 要求 JDK 以外饿敲,沒有什么其他的依賴,同學(xué)們能夠快速的在單機(jī)上就搭建一個(gè)實(shí)驗(yàn)環(huán)境逛绵,試用 ES 的全部功能怀各。
Elastic Search 概念
在學(xué)習(xí)和使用 ES 之前,有一些 ES 的核心概念需要先了解术浪。了解這些概念有助于你對(duì) ES 的理解瓢对。
準(zhǔn)實(shí)時(shí)(Near Realtime)
和關(guān)系數(shù)據(jù)庫這類系統(tǒng)不一樣。在關(guān)系型數(shù)據(jù)庫中胰苏,對(duì)數(shù)據(jù)的修改馬上就反應(yīng)在查詢結(jié)果中了硕蛹,但是在 ES 系統(tǒng)中,對(duì)數(shù)據(jù)進(jìn)行索引后硕并,這個(gè)結(jié)果要反應(yīng)到你的查詢結(jié)果法焰,可能有一個(gè)小的延遲。這個(gè)延遲通常在一秒以內(nèi)倔毙。這是因?yàn)樵?ES 在索引文檔的時(shí)候埃仪,是先將數(shù)據(jù)寫入 Member Cache 中,然后系統(tǒng)每隔一秒鐘將 Member Cache 中的數(shù)據(jù)寫入到 FileSystem Cache 中陕赃。只有寫入到 FileSystem Cache 中的數(shù)據(jù)才會(huì)被查詢到卵蛉。所以會(huì)有這個(gè)延遲。這也是 ES 被稱為準(zhǔn)實(shí)時(shí)系統(tǒng)的原因凯正。
集群(Cluster)
一臺(tái)或者多臺(tái) ES 服務(wù)器組成一個(gè)集群毙玻。沒錯(cuò),一臺(tái)服務(wù)器也被稱為集群廊散。集群中所有的節(jié)點(diǎn)一起來保存你的數(shù)據(jù)桑滩,共同提供給客戶端索引、查詢數(shù)據(jù)的能力。一個(gè)集群會(huì)有一個(gè)唯一的集群名稱运准,這個(gè)名稱默認(rèn)是 “elasticsearch” 幌氮,也可以通過配置修改。ES 的節(jié)點(diǎn)通過這個(gè)唯一的名字加入集群胁澳,并成為集群的一部分该互。
節(jié)點(diǎn)(Node)
節(jié)點(diǎn)是一個(gè)單獨(dú)的 ES 服務(wù)器,他作為 ES 集群的一部分韭畸,和其他節(jié)點(diǎn)一起協(xié)同完成 ES 集群的文檔索引宇智,文檔查詢的能力。節(jié)點(diǎn)在集群中也有一個(gè)唯一的名字胰丁。默認(rèn)情況下在節(jié)點(diǎn)啟動(dòng)的時(shí)候自動(dòng)生成一個(gè)隨機(jī)的唯一標(biāo)識(shí)符來指定節(jié)點(diǎn)的名字随橘,你也可以通過配置來指定。這個(gè)名字用來標(biāo)識(shí)節(jié)點(diǎn)在集群中的身份锦庸。
索引(Index)
文檔是有相似特性的文檔的集合机蔗。概念上類似關(guān)系數(shù)據(jù)的表(Table)。索引在集群中用唯一的名稱來標(biāo)識(shí)甘萧,這個(gè)名稱的字母必須都是小寫萝嘁。執(zhí)行索引、查詢扬卷、修改牙言、刪除文檔的操作時(shí)候,都需要通過名稱指明是在哪個(gè)索引上進(jìn)行的邀泉。在一個(gè)集群中嬉挡,我們可以創(chuàng)建任意多個(gè)索引。
類型(Type)
這個(gè)是一個(gè)在 ES 6.0 開始后被定義為不推薦使用的特性汇恤。原本的目的是為了讓用戶在同一個(gè)索引中保存不同類型數(shù)據(jù)文檔庞钢。例如在同一個(gè)索引中既保存用戶信息,又保存訂單信息∫蚧眩現(xiàn)在推薦在同一個(gè)索引中只保存一類數(shù)據(jù)基括。例如一個(gè)索引保存用戶信息,另一個(gè)索引保存訂單數(shù)據(jù)财岔。預(yù)計(jì)這個(gè)特性將在 ES 7.0 版本中被刪除风皿,所以大家就不要在用這個(gè)特性了。
文檔(Document)
文檔是 ES 中被索引的基本單位匠璧。概念上類似關(guān)系數(shù)據(jù)庫中的一條記錄桐款。形式上,一個(gè)文檔是一個(gè) JSON 格式的數(shù)據(jù)夷恍。一個(gè)索引中可以存儲(chǔ)任意多數(shù)量的文檔魔眨。
分片(Shards)
分片是 ES 中非常重要的概念。一個(gè)索引可能會(huì)存儲(chǔ)大量的數(shù)據(jù)。這些數(shù)據(jù)存儲(chǔ)所需要的空間可能會(huì)超出一個(gè)單獨(dú)服務(wù)器存儲(chǔ)空間的限制遏暴≈豆簦或者說大量的數(shù)據(jù)都存儲(chǔ)在一個(gè)單獨(dú)的服務(wù)器上,會(huì)導(dǎo)致在索引中查詢數(shù)據(jù)的性能太差朋凉。
為了解決這個(gè)問題州丹,ES 將索引的數(shù)據(jù)分割成多份,稱為分片杂彭。當(dāng)你創(chuàng)建一個(gè)索引的時(shí)候墓毒,可以簡(jiǎn)單的通過一個(gè)數(shù)字來指定分片的數(shù)量。默認(rèn)情況下 ES 會(huì)為每個(gè)索引分片5個(gè)分片亲怠。每個(gè)分片存儲(chǔ)索引的一部分?jǐn)?shù)據(jù)蚁鳖。每個(gè)分片能夠針對(duì)自己存儲(chǔ)的這部分?jǐn)?shù)據(jù),提供全部的功能赁炎。分片的數(shù)量在創(chuàng)建索引的時(shí)候可以指定,索引數(shù)據(jù)之后钾腺,分片數(shù)量不能改變徙垫。
切片為 ES 提供了兩個(gè)好處:
- 他能夠方便的水平分割和擴(kuò)展你的索引存儲(chǔ)的數(shù)據(jù)量。當(dāng)數(shù)據(jù)量很大的時(shí)候放棒,用更多的索引分片來保存數(shù)據(jù)姻报。
- 多個(gè)分片能夠讓你的索引的操作并行化。讓一次操作分布在多個(gè)不同節(jié)點(diǎn)的多個(gè)分片上间螟,提高系統(tǒng)的吞吐量吴旋。
這種分布式和并行化都在 ES 的后臺(tái)進(jìn)行,對(duì)用戶來說是透明的厢破。
ES 的每一個(gè)分片都是一個(gè)獨(dú)立的 Lunce 的索引荣瑟。這也是為什么說 ES 是一個(gè)基于 Lunce 的分布式搜索引擎的原因∧幔基于 Lunce 索引的限制笆焰,一個(gè) ES 的分片存儲(chǔ)的文檔的數(shù)量最大是
2,147,483,519 條。這個(gè)數(shù)值是Integer.MAX_VALUE - 128 計(jì)算得到的见坑。
副本(Relicas)
在一個(gè)大規(guī)模的集群中嚷掠,集群中的節(jié)點(diǎn)隨時(shí)隨地都可能會(huì)發(fā)生故障。一旦某個(gè)節(jié)點(diǎn)因?yàn)榫W(wǎng)絡(luò)荞驴、存儲(chǔ)或者其他的原因失效的時(shí)候不皆,存儲(chǔ)在改節(jié)點(diǎn)上的分片的數(shù)據(jù)就丟失了。為了應(yīng)對(duì)這種問題熊楼, ES 允許你為索引的每個(gè)分片建立一個(gè)或者多個(gè)復(fù)制品霹娄,稱為副本。這樣,索引的每個(gè)分片就有一個(gè)主分片和多個(gè)副本分片项棠。
副本機(jī)制也為 ES 帶來兩大好處
- 首先悲雳,他在 ES 的集群中的某些節(jié)點(diǎn)因?yàn)楦鞣N原因?qū)е鹿收系臅r(shí)候,提供了高可用性香追。不會(huì)因?yàn)椴糠止?jié)點(diǎn)的失效導(dǎo)致整個(gè) ES 集群不可用合瓢。當(dāng)然,首先索引分片的主分片和副本分片不能存儲(chǔ)在一個(gè)服務(wù)器上透典,否則一個(gè)服務(wù)器故障了晴楔,會(huì)導(dǎo)致整個(gè)分片不可用。
- 同分片一樣峭咒,多個(gè)副本同樣能夠?qū)⒛愕牟樵兎植嫉讲煌墓?jié)點(diǎn)上税弃,讓查詢操作并行化,從而提高查詢的吞吐量凑队。
默認(rèn)情況下则果,ES 會(huì)為索引分配一個(gè)副本。所以一個(gè)ES 集群你應(yīng)該提供兩個(gè)以上的節(jié)點(diǎn)漩氨。來獲得高可用性西壮。