ES簡介

一、簡介

ElasticSearch是一個基于Lucene的搜索服務(wù)器。它提供了一個分布式多用戶能力的全文搜索引擎,基于RESTful web接口操作ES,也可以利用Java API。Elasticsearch是用Java開發(fā)的,并作為Apache許可條款下的開放源碼發(fā)布,是當(dāng)前流行的企業(yè)級搜索引擎。設(shè)計用于云計算中,能夠達到實時搜索,穩(wěn)定,可靠,快速,安裝使用方便。

我們建立一個網(wǎng)站或應(yīng)用程序,并要添加搜索功能,但是想要完成搜索工作的創(chuàng)建是非常困難的。我們希望搜索解決方案要運行速度快,我們希望能有一個零配置和一個完全免費的搜索模式,我們希望能夠簡單地使用JSON通過HTTP來索引數(shù)據(jù),我們希望我們的搜索服務(wù)器始終可用,我們希望能夠從一臺開始并擴展到數(shù)百臺,我們要實時搜索,我們要簡單的多租戶,我們希望建立一個云的解決方案。因此我們利用Elasticsearch來解決所有這些問題及可能出現(xiàn)的更多其它問題。

設(shè)計用途:用于分布式全文檢索
技術(shù)支持:通過HTTP使用JSON進行數(shù)據(jù)索引

Elasticsearch學(xué)習(xí)

二、產(chǎn)生

1、大規(guī)模數(shù)據(jù)如何檢索?

如:當(dāng)系統(tǒng)數(shù)據(jù)量上了10億、100億條的時候,我們在做系統(tǒng)架構(gòu)的時候通常會從以下角度去考慮問題:
1)用什么數(shù)據(jù)庫 ;(mysql、sybase、oracle、mongodb、hbase)
2)如何解決單點故障;(lvs、F5、A10、Zookeep、MQ)
3)如何保證數(shù)據(jù)安全性;(熱備、冷備、異地多活)
4)如何解決檢索難題;(數(shù)據(jù)庫代理中間件:mysql-proxy、Cobar、MaxScale)
5)如何解決統(tǒng)計分析問題;(離線、近實時)

2、傳統(tǒng)數(shù)據(jù)庫的應(yīng)對解決方案

對于關(guān)系型數(shù)據(jù),我們通常采用以下或類似架構(gòu)去解決查詢瓶頸和寫入瓶頸:
1)通過主從備份解決數(shù)據(jù)安全性問題;
2)通過數(shù)據(jù)庫代理中間件心跳監(jiān)測,解決單點故障問題;
3)通過代理中間件將查詢語句分發(fā)到各個slave節(jié)點進行查詢,并匯總結(jié)果


image.png

3、非關(guān)系型數(shù)據(jù)庫的解決方案

對于Nosql數(shù)據(jù)庫,以mongodb為例,其它原理類似:
1)通過副本備份保證數(shù)據(jù)安全性;
2)通過節(jié)點競選機制解決單點問題;
3)先從配置庫檢索分片信息,然后將請求分發(fā)到各個節(jié)點,最后由路由節(jié)點合并匯總結(jié)果

三、ES解決方案

為解決以上問題,從源頭著手分析,通常會從以下方式來尋找方法:
1、存儲數(shù)據(jù)時按有序存儲;
2、將數(shù)據(jù)和索引分離;
3、壓縮數(shù)據(jù);
這就引出了Elasticsearch。

ES定義

ES=elaticsearch簡寫, Elasticsearch是一個開源的高擴展的分布式全文檢索引擎,它可以近乎實時的存儲、檢索數(shù)據(jù);本身擴展性很好,可以擴展到上百臺服務(wù)器,處理PB級別的數(shù)據(jù)。
Elasticsearch也使用Java開發(fā)并使用Lucene作為其核心來實現(xiàn)所有索引和搜索的功能,但是它的目的是通過簡單的RESTful API來隱藏Lucene的復(fù)雜性,從而讓全文搜索變得簡單。

Lucene與ES關(guān)系

1)Lucene只是一個庫。想要使用它,你必須使用Java來作為開發(fā)語言并將其直接集成到你的應(yīng)用中,更糟糕的是,Lucene非常復(fù)雜,你需要深入了解檢索的相關(guān)知識來理解它是如何工作的。
2)Elasticsearch也使用Java開發(fā)并使用Lucene作為其核心來實現(xiàn)所有索引和搜索的功能,但是它的目的是通過簡單的RESTful API來隱藏Lucene的復(fù)雜性,從而讓全文搜索變得簡單。

ES主要解決問題:

1)檢索相關(guān)數(shù)據(jù);
2)返回統(tǒng)計結(jié)果;
3)速度要快。

ES數(shù)據(jù)架構(gòu)的主要概念

image.png

(1)關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)庫(DataBase),等價于ES中的索引(Index)
(2)一個數(shù)據(jù)庫下面有N張表(Table),等價于1個索引Index下面有N多類型(Type),
(3)一個數(shù)據(jù)庫表(Table)下的數(shù)據(jù)由多行(ROW)多列(column,屬性)組成,等價于1個Type由多個文檔(Document)和多Field組成。
(4)在一個關(guān)系型數(shù)據(jù)庫里面,schema定義了表、每個表的字段,還有表和字段之間的關(guān)系。 與之對應(yīng)的,在ES中:Mapping定義索引下的Type的字段處理規(guī)則,即索引如何建立、索引類型、是否保存原始索引JSON文檔、是否壓縮原始JSON文檔、是否需要分詞處理、如何進行分詞處理等。
(5)在數(shù)據(jù)庫中的增insert、刪delete、改update、查search操作等價于ES中的增PUT/POST、刪Delete、改_update、查GET.

ES特點和優(yōu)勢

1)分布式實時文件存儲,可將每一個字段存入索引,使其可以被檢索到。
2)實時分析的分布式搜索引擎。
分布式:索引分拆成多個分片,每個分片可有零個或多個副本。集群中的每個數(shù)據(jù)節(jié)點都可承載一個或多個分片,并且協(xié)調(diào)和處理各種操作;
負(fù)載再平衡和路由在大多數(shù)情況下自動完成。
3)可以擴展到上百臺服務(wù)器,處理PB級別的結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)。也可以運行在單臺PC上
4)支持插件機制,分詞插件、同步插件、Hadoop插件、可視化插件等。

對比MYSQL

1、如果業(yè)務(wù)數(shù)據(jù)為結(jié)構(gòu)化數(shù)據(jù),同時不需要特別關(guān)注排名和智能分詞模糊匹配查詢等特性,則建議采用關(guān)系型數(shù)據(jù)庫如MySQL來作為數(shù)據(jù)存儲介質(zhì)并使用配套搜索引擎
2、如果業(yè)務(wù)數(shù)據(jù)為非結(jié)構(gòu)化數(shù)據(jù),同時更關(guān)注排名和需要智能分詞模糊匹配的特性,則建議采用非關(guān)系型數(shù)據(jù)庫如ES作為數(shù)據(jù)存儲介質(zhì)并使用配套搜索引擎。
3、MYSQL支持事務(wù)和訪問權(quán)限控制,ES不支持事務(wù)和訪問權(quán)限控制
4、ES在全文搜索、分詞、常規(guī)搜索、聚合統(tǒng)計方面性能高,ES團隊不建議完全采用ES作為數(shù)據(jù)庫,而是作為一個分布式搜索服務(wù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容