1、ES是如何產(chǎn)生的冠桃?
(1)思考:大規(guī)模數(shù)據(jù)如何檢索?
如:當(dāng)系統(tǒng)數(shù)據(jù)量上了10億道宅、100億條的時(shí)候食听,我們?cè)谧鱿到y(tǒng)架構(gòu)的時(shí)候通常會(huì)從以下角度去考慮問(wèn)題:
1)用什么數(shù)據(jù)庫(kù)好?(mysql污茵、sybase樱报、oracle、達(dá)夢(mèng)泞当、神通迹蛤、mongodb、hbase…)
2)如何解決單點(diǎn)故障;(lvs盗飒、F5嚷量、A10、Zookeep逆趣、MQ)
3)如何保證數(shù)據(jù)安全性蝶溶;(熱備、冷備宣渗、異地多活)
4)如何解決檢索難題抖所;(數(shù)據(jù)庫(kù)代理中間件:mysql-proxy、Cobar痕囱、MaxScale等;)
5)如何解決統(tǒng)計(jì)分析問(wèn)題部蛇;(離線、近實(shí)時(shí))
(2)傳統(tǒng)數(shù)據(jù)庫(kù)的應(yīng)對(duì)解決方案
對(duì)于關(guān)系型數(shù)據(jù)咐蝇,我們通常采用以下或類似架構(gòu)去解決查詢瓶頸和寫(xiě)入瓶頸:
解決要點(diǎn):
1)通過(guò)主從備份解決數(shù)據(jù)安全性問(wèn)題涯鲁;
2)通過(guò)數(shù)據(jù)庫(kù)代理中間件心跳監(jiān)測(cè),解決單點(diǎn)故障問(wèn)題有序;
3)通過(guò)代理中間件將查詢語(yǔ)句分發(fā)到各個(gè)slave節(jié)點(diǎn)進(jìn)行查詢抹腿,并匯總結(jié)果
2、ES介紹
Elasticsearch 是一個(gè)分布式可擴(kuò)展的實(shí)時(shí)搜索和分析引擎.Elasticsearch也使用Java開(kāi)發(fā)并使用Apache Lucene作為其核心來(lái)實(shí)現(xiàn)所有索引和搜索的功能旭寿,但是它的目的是通過(guò)簡(jiǎn)單的RESTful API來(lái)隱藏Lucene的復(fù)雜性警绩,從而讓全文搜索變得簡(jiǎn)單,它不僅包括了全文搜索功能盅称,還可以進(jìn)行以下工作:
- 分布式實(shí)時(shí)文件存儲(chǔ)肩祥,并將每一個(gè)字段都編入索引,使其可以被搜索缩膝。
- 實(shí)時(shí)分析的分布式搜索引擎混狠。
- 可以擴(kuò)展到上百臺(tái)服務(wù)器,處理PB級(jí)別的結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)疾层。
基本概念
先說(shuō)Elasticsearch的文件存儲(chǔ)将饺,Elasticsearch是面向文檔型數(shù)據(jù)庫(kù),一條數(shù)據(jù)在這里就是一個(gè)文檔痛黎,用JSON作為文檔序列化的格式
用MySQL的關(guān)系來(lái)說(shuō)明ES的存儲(chǔ)
索引(indices)--------------------------------Databases 數(shù)據(jù)庫(kù)
類型(type)-----------------------------Table 數(shù)據(jù)表
文檔(Document)----------------Row 行
字段(Field)-------------------Columns 列
3予弧、ES核心概念
1)Cluster:集群。
ES可以作為一個(gè)獨(dú)立的單個(gè)搜索服務(wù)器湖饱。不過(guò)掖蛤,為了處理大型數(shù)據(jù)集,實(shí)現(xiàn)容錯(cuò)和高可用性井厌,ES可以運(yùn)行在許多互相合作的服務(wù)器上蚓庭。這些服務(wù)器的集合稱為集群致讥。
2)Node:節(jié)點(diǎn)。
形成集群的每個(gè)服務(wù)器稱為節(jié)點(diǎn)彪置。
3)Shard:分片拄踪。
當(dāng)有大量的文檔時(shí)蝇恶,由于內(nèi)存的限制拳魁、磁盤(pán)處理能力不足、無(wú)法足夠快的響應(yīng)客戶端的請(qǐng)求等撮弧,一個(gè)節(jié)點(diǎn)可能不夠潘懊。這種情況下,數(shù)據(jù)可以分為較小的分片贿衍。每個(gè)分片放到不同的服務(wù)器上授舟。
當(dāng)你查詢的索引分布在多個(gè)分片上時(shí),ES會(huì)把查詢發(fā)送給每個(gè)相關(guān)的分片贸辈,并將結(jié)果組合在一起释树,而應(yīng)用程序并不知道分片的存在。即:這個(gè)過(guò)程對(duì)用戶來(lái)說(shuō)是透明的擎淤。
4)Replia:副本奢啥。
為提高查詢吞吐量或?qū)崿F(xiàn)高可用性,可以使用分片副本捧杉。
副本是一個(gè)分片的精確復(fù)制弟跑,每個(gè)分片可以有零個(gè)或多個(gè)副本吨拍。ES中可以有許多相同的分片,其中之一被選擇更改索引操作赌结,這種特殊的分片稱為主分片。
當(dāng)主分片丟失時(shí)孝冒,如:該分片所在的數(shù)據(jù)不可用時(shí)柬姚,集群將副本提升為新的主分片。
5)全文檢索庄涡。
全文檢索就是對(duì)一篇文章進(jìn)行索引伤靠,可以根據(jù)關(guān)鍵字搜索,類似于mysql里的like語(yǔ)句啼染。
全文索引就是把內(nèi)容根據(jù)詞的意義進(jìn)行分詞宴合,然后分別創(chuàng)建索引,例如”你們的激情是因?yàn)槭裁词虑閬?lái)的” 可能會(huì)被分詞成:“你們“迹鹅,”激情“卦洽,“什么事情“,”來(lái)“ 等關(guān)鍵詞斜棚,這樣當(dāng)你搜索“你們” 或者 “激情” 都會(huì)把這句搜出來(lái)阀蒂。
4该窗、倒排索引
也常被稱為反向索引、置入檔案或反向檔案蚤霞,是一種索引方法酗失,被用來(lái)存儲(chǔ)在全文搜索下某個(gè)單詞在一個(gè)文檔或者一組文檔中的存儲(chǔ)位置的映射。它是文檔檢索系統(tǒng)中最常用的數(shù)據(jù)結(jié)構(gòu)昧绣。通過(guò)倒排索引规肴,可以根據(jù)單詞快速獲取包含這個(gè)單詞的文檔列表。倒排索引主要由兩個(gè)部分組成:“單詞詞典”和“倒排文件”
推薦一個(gè)鏈接:
https://developer.51cto.com/art/201904/594615.htm
5夜畴、ES國(guó)內(nèi)外使用優(yōu)秀案例
1) 2013年初拖刃,GitHub拋棄了Solr,采取ElasticSearch 來(lái)做PB級(jí)的搜索贪绘。 “GitHub使用ElasticSearch搜索20TB的數(shù)據(jù)兑牡,包括13億文件和1300億行代碼”。
2)維基百科:?jiǎn)?dòng)以elasticsearch為基礎(chǔ)的核心搜索架構(gòu)税灌。
3)SoundCloud:“SoundCloud使用ElasticSearch為1.8億用戶提供即時(shí)而精準(zhǔn)的音樂(lè)搜索服務(wù)”均函。
4)百度:百度目前廣泛使用ElasticSearch作為文本數(shù)據(jù)分析,采集百度所有服務(wù)器上的各類指標(biāo)數(shù)據(jù)及用戶自定義數(shù)據(jù)菱涤,通過(guò)對(duì)各種數(shù)據(jù)進(jìn)行多維分析展示苞也,輔助定位分析實(shí)例異常或業(yè)務(wù)層面異常狸窘。