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