ES簡介


 

一、簡介

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

1、概念以及特點

1、Elasticsearch和MongoDB/Redis/Memcache一樣,是非關系型數據庫。

是一個接近實時的搜索平台,從索引這個文檔到這個文檔能夠被搜索到只有一個輕微的延遲,企業應用定位:采用Restful API標准的可擴展和高可用的實時數據分析的全文搜索工具。

2、可拓展:支持一主多從且擴容簡易,只要cluster.name一致且在同一個網絡中就能自動加入當前集群;本身就是開源軟件,也支持很多開源的第三方插件。

3、高可用:在一個集群的多個節點中進行分布式存儲,索引支持shards和復制,即使部分節點down掉,也能自動進行數據恢復和主從切換。

4、采用RestfulAPI標准:通過http接口使用JSON格式進行操作數據。

5、數據存儲的最小單位是文檔,本質上是一個JSON 文本:

官網:https://www.elastic.co/cn/what-is/elasticsearch

設計用途:用於分布式全文檢索
技術支持:通過HTTP使用JSON進行數據索引

二、產生

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節點進行查詢,並匯總結果


 
image.png

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數據架構的主要概念

 
image.png

(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作為數據庫,而是作為一個分布式搜索服務




轉載:https://www.cnblogs.com/Ace-suiyuan008/p/9958331.html

   https://www.jianshu.com/p/5aa865bd7b68
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM