ES與傳統數據庫,爲什麼用ES?

一、簡介
ElasticSearch是一個基於Lucene的搜索服務器。它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口操作ES,也可以利用Java API。Elasticsearch是用Java開發的,並作爲Apache許可條款下的開放源碼發佈,是當前流行的企業級搜索引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。
我們建立一個網站或應用程序,並要添加搜索功能,但是想要完成搜索工作的創建是非常困難的。我們希望搜索解決方案要運行速度快,我們希望能有一個零配置和一個完全免費的搜索模式,我們希望能夠簡單地使用JSON通過HTTP來索引數據,我們希望我們的搜索服務器始終可用,我們希望能夠從一臺開始並擴展到數百臺,我們要實時搜索,我們要簡單的多租戶,我們希望建立一個雲的解決方案。因此我們利用Elasticsearch來解決所有這些問題及可能出現的更多其它問題。
設計用途:用於分佈式全文檢索
技術支持:通過HTTP使用JSON進行數據索引
Elasticsearch學習
二、產生
1、大規模數據如何檢索?
如:當系統數據量上了10億、100億條的時候,我們在做系統架構的時候通常會從以下角度去考慮問題:
1)用什麼數據庫 ;(mysql、sybase、oracle、mongodb、hbase)
2)如何解決單點故障;(lvs、F5、A10、Zookeep、MQ)
3)如何保證數據安全性;(熱備、冷備、異地多活)
4)如何解決檢索難題;(數據庫代理中間件:mysql-proxy、Cobar、MaxScale)
5)如何解決統計分析問題;(離線、近實時)
2、傳統數據庫的應對解決方案
對於關係型數據,我們通常採用以下或類似架構去解決查詢瓶頸和寫入瓶頸:
1)通過主從備份解決數據安全性問題;
2)通過數據庫代理中間件心跳監測,解決單點故障問題;
3)通過代理中間件將查詢語句分發到各個slave節點進行查詢,並彙總結果

3、非關係型數據庫的解決方案
對於Nosql數據庫,以mongodb爲例,其它原理類似:
1)通過副本備份保證數據安全性;
2)通過節點競選機制解決單點問題;
3)先從配置庫檢索分片信息,然後將請求分發到各個節點,最後由路由節點合併彙總結果
三、ES解決方案
爲解決以上問題,從源頭着手分析,通常會從以下方式來尋找方法:
1、存儲數據時按有序存儲;
2、將數據和索引分離;
3、壓縮數據;
這就引出了Elasticsearch。
ES定義
ES=elaticsearch簡寫, Elasticsearch是一個開源的高擴展的分佈式全文檢索引擎,它可以近乎實時的存儲、檢索數據;本身擴展性很好,可以擴展到上百臺服務器,處理PB級別的數據。
Elasticsearch也使用Java開發並使用Lucene作爲其核心來實現所有索引和搜索的功能,但是它的目的是通過簡單的RESTful API來隱藏Lucene的複雜性,從而讓全文搜索變得簡單。
Lucene與ES關係
1)Lucene只是一個庫。想要使用它,你必須使用Java來作爲開發語言並將其直接集成到你的應用中,更糟糕的是,Lucene非常複雜,你需要深入瞭解檢索的相關知識來理解它是如何工作的。
2)Elasticsearch也使用Java開發並使用Lucene作爲其核心來實現所有索引和搜索的功能,但是它的目的是通過簡單的RESTful API來隱藏Lucene的複雜性,從而讓全文搜索變得簡單。
ES主要解決問題:
1)檢索相關數據;
2)返回統計結果;
3)速度要快。
ES數據架構的主要概念

(1)關係型數據庫中的數據庫(DataBase),等價於ES中的索引(Index)
(2)一個數據庫下面有N張表(Table),等價於1個索引Index下面有N多類型(Type),
(3)一個數據庫表(Table)下的數據由多行(ROW)多列(column,屬性)組成,等價於1個Type由多個文檔(Document)和多Field組成。
(4)在一個關係型數據庫裏面,schema定義了表、每個表的字段,還有表和字段之間的關係。 與之對應的,在ES中:Mapping定義索引下的Type的字段處理規則,即索引如何建立、索引類型、是否保存原始索引JSON文檔、是否壓縮原始JSON文檔、是否需要分詞處理、如何進行分詞處理等。
(5)在數據庫中的增insert、刪delete、改update、查search操作等價於ES中的增PUT/POST、刪Delete、改_update、查GET.
ES特點和優勢
1)分佈式實時文件存儲,可將每一個字段存入索引,使其可以被檢索到。
2)實時分析的分佈式搜索引擎。
分佈式:索引分拆成多個分片,每個分片可有零個或多個副本。集羣中的每個數據節點都可承載一個或多個分片,並且協調和處理各種操作;
負載再平衡和路由在大多數情況下自動完成。
3)可以擴展到上百臺服務器,處理PB級別的結構化或非結構化數據。也可以運行在單臺PC上
4)支持插件機制,分詞插件、同步插件、Hadoop插件、可視化插件等。
對比MYSQL
1、如果業務數據爲結構化數據,同時不需要特別關注排名和智能分詞模糊匹配查詢等特性,則建議採用關係型數據庫如MySQL來作爲數據存儲介質並使用配套搜索引擎
2、如果業務數據爲非結構化數據,同時更關注排名和需要智能分詞模糊匹配的特性,則建議採用非關係型數據庫如ES作爲數據存儲介質並使用配套搜索引擎。
3、MYSQL支持事務和訪問權限控制,ES不支持事務和訪問權限控制
4、ES在全文搜索、分詞、常規搜索、聚合統計方面性能高,ES團隊不建議完全採用ES作爲數據庫,而是作爲一個分佈式搜索服務

作者:晚歌y
鏈接:https://www.jianshu.com/p/5aa865bd7b68
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發佈了42 篇原創文章 · 獲贊 32 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章