一次性帶你搞明白面試必問題,談?wù)勀銓?duì)ES的理解
?有粉絲在評(píng)論區(qū)留言說,讓我拍一期關(guān)于ES的視頻。今天,我給大家分享一下我對(duì)ES的理解。
1、ES是什么
ES全稱是Elastic Search,它是一個(gè)建立在全文搜索引擎庫Lucene基礎(chǔ)上的開源搜索和分析引擎。ES它本身具有分布式存儲(chǔ)、檢索速度快的特性。所以,我們經(jīng)常會(huì)用它來實(shí)現(xiàn)全文檢索的功能。
Elastic官網(wǎng)對(duì)ES的定義已經(jīng)不再是ElasticSearch這一個(gè)組件,而是指Elastic Stack生態(tài)。
而Elastic Stack主要包括ElasticSearch、Logstash、Kibana,這三個(gè)經(jīng)典組合也稱之為ELK。ElasticSearch主要用來做數(shù)據(jù)存儲(chǔ)、Logstash主要用來做數(shù)據(jù)采集,Kibana主要用來做數(shù)據(jù)可視化展示。
因?yàn)镋S應(yīng)用更廣泛的場(chǎng)景還是ElasticSearch,所以,下面我們給大家分享的ES還是單指ElasticSearch。比如,網(wǎng)站搜索,日志聚集和檢索,這些都可能會(huì)涉及到TB級(jí)別的數(shù)據(jù)場(chǎng)景,用ES是一個(gè)比較好的選擇。
2、ES為什么這么快
ES之所以這么快,我認(rèn)為主要有以下幾個(gè)方面的原因:
1、ES是基于Lucene開發(fā)的一個(gè)全文搜索引擎,一方面Lucene是擅長(zhǎng)管理大量的索引數(shù)據(jù);另外一方面,它會(huì)對(duì)數(shù)據(jù)進(jìn)行分詞以后再保存索引。這樣,能夠去提升數(shù)據(jù)的檢索效率。
2、ES采用了倒排索引。所謂倒排索引就是通過屬性值來確定數(shù)據(jù)記錄位置的索引,從而避免全表掃描的問題。
3、ES存儲(chǔ)數(shù)據(jù)采用了分片機(jī)制。
4、ES擴(kuò)展性很好,支持通過水平擴(kuò)展的方式來動(dòng)態(tài)增加節(jié)點(diǎn),從而提升ES的處理性能。能夠支持上百臺(tái)服務(wù)器節(jié)點(diǎn)的擴(kuò)展,并且支持TB級(jí)別的結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)。
5、ES內(nèi)部提供的數(shù)據(jù)匯總和索引生命周期管理的功能,更加便于高效地存儲(chǔ)和檢索數(shù)據(jù)。
?3、ES應(yīng)用指南
當(dāng)然,ES并不是萬能,如果使用不恰當(dāng),也會(huì)帶來一些性能瓶頸。不太建議使用復(fù)雜的關(guān)聯(lián)查詢,這對(duì)ES的性能影響非常大。
另外,還要避免深度分頁查詢。因?yàn)?,ES的分頁是通過from和size參數(shù)來實(shí)現(xiàn),也就是說,在查詢的時(shí)候,每個(gè)分片必須要先構(gòu)造一個(gè)長(zhǎng)度為from + size的優(yōu)先隊(duì)列,然后回傳的網(wǎng)關(guān)節(jié)點(diǎn)。網(wǎng)關(guān)節(jié)點(diǎn)再對(duì)這些優(yōu)先隊(duì)列進(jìn)行排序,再找到正確的size文檔。而當(dāng)from足夠大的情況下,容易造成OOM以及網(wǎng)絡(luò)傳輸性能下降的問題。
以上就是我對(duì)ES的理解。