ElasticSearch(概念篇):你知道的, 爲了搜索…

ES=elaticsearch簡寫, Elasticsearch是一個開源的高擴展的分佈式全文檢索引擎,它可以近乎實時的存儲、檢索數據;本身擴展性很好,可以擴展到上百臺服務器,處理PB級別的數據。 

目錄

Elasticsearch是如何產生的?

大規模數據如何檢索?

傳統數據庫的應對解決方案

非關係型數據庫的解決方案

完全把數據放入內存怎麼樣?

什麼是Elasticsearch

 Lucene與ElasticSearch關係?

ElasticSearch主要解決問題:

ElasticSearch工作原理

ElasticSearch核心概念

Cluster:集羣。

Node:節點。

Shard:分片。

Replia:副本。

全文檢索。

ES數據架構的主要概念(與關係數據庫Mysql對比)

ELK是什麼?

ElasticSearch特點和優勢

ElasticSearch優勢

ElasticSearch特點

爲什麼要用ElasticSearch?

 ES國內外使用優秀案例

ElasticSearch相關


Elasticsearch是如何產生的?

大規模數據如何檢索?

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

傳統數據庫的應對解決方案

對於關係型數據,我們通常採用以下或類似架構去解決查詢瓶頸和寫入瓶頸: 
解決要點: 
1)通過主從備份解決數據安全性問題; 
2)通過數據庫代理中間件心跳監測,解決單點故障問題; 
3)通過代理中間件將查詢語句分發到各個slave節點進行查詢,並彙總結果 

非關係型數據庫的解決方案

對於Nosql數據庫,以mongodb爲例,其它原理類似: 
解決要點: 
1)通過副本備份保證數據安全性; 
2)通過節點競選機制解決單點問題; 
3)先從配置庫檢索分片信息,然後將請求分發到各個節點,最後由路由節點合併彙總結果 

完全把數據放入內存怎麼樣?

我們知道,完全把數據放在內存中是不可靠的,實際上也不太現實,當我們的數據達到PB級別時,按照每個節點96G內存計算,在內存完全裝滿的數據情況下,我們需要的機器是:1PB=1024T=1048576G 
節點數=1048576/96=10922個 
實際上,考慮到數據備份,節點數往往在2.5萬臺左右。成本巨大決定了其不現實!

從前面討論我們瞭解到,把數據放在內存也好,不放在內存也好,都不能完完全全解決問題。 
全部放在內存速度問題是解決了,但成本問題上來了。 
爲解決以上問題,從源頭着手分析,通常會從以下方式來尋找方法: 
1、存儲數據時按有序存儲; 
2、將數據和索引分離; 
3、壓縮數據; 
這就引出了Elasticsearch。

什麼是Elasticsearch

Elasticsearch 是一個開源的搜索引擎,建立在一個全文搜索引擎庫 Apache Lucene™ 基礎之上。 Lucene 可以說是當下最先進、高性能、全功能的搜索引擎庫--無論是開源還是私有。

但是 Lucene 僅僅只是一個庫。爲了充分發揮其功能,你需要使用 Java 並將 Lucene 直接集成到應用程序中。 更糟糕的是,您可能需要獲得信息檢索學位才能瞭解其工作原理。Lucene 非常 複雜。

Elasticsearch 也是使用 Java 編寫的,它的內部使用 Lucene 做索引與搜索,但是它的目的是使全文檢索變得簡單, 通過隱藏 Lucene 的複雜性,取而代之的提供一套簡單一致的 RESTful API。

然而,Elasticsearch 不僅僅是 Lucene,並且也不僅僅只是一個全文搜索引擎。 它可以被下面這樣準確的形容:

  • 一個分佈式的實時文檔存儲,每個字段 可以被索引與搜索
  • 一個分佈式實時分析搜索引擎
  • 能勝任上百個服務節點的擴展,並支持 PB 級別的結構化或者非結構化數據

Elasticsearch 將所有的功能打包成一個單獨的服務,這樣你可以通過程序與它提供的簡單的 RESTful API 進行通信, 可以使用自己喜歡的編程語言充當 web 客戶端,甚至可以使用命令行(去充當這個客戶端)。

就 Elasticsearch 而言,起步很簡單。對於初學者來說,它預設了一些適當的默認值,並隱藏了複雜的搜索理論知識。 它 開箱即用 。只需最少的理解,你很快就能具有生產力。

Elasticsearch也使用Java開發並使用Lucene作爲其核心來實現所有索引和搜索的功能,但是它的目的是通過簡單的RESTful API來隱藏Lucene的複雜性,從而讓全文搜索變得簡單。

 Lucene與ElasticSearch關係?

1)Lucene只是一個庫。想要使用它,你必須使用Java來作爲開發語言並將其直接集成到你的應用中,更糟糕的是,Lucene非常複雜,你需要深入瞭解檢索的相關知識來理解它是如何工作的。

2)Elasticsearch也使用Java開發並使用Lucene作爲其核心來實現所有索引和搜索的功能,但是它的目的是通過簡單的RESTful API來隱藏Lucene的複雜性,從而讓全文搜索變得簡單。

ElasticSearch主要解決問題:

1)檢索相關數據; 
2)返回統計結果; 
3)速度要快。

ElasticSearch工作原理

當ElasticSearch的節點啓動後,它會利用多播(multicast)(或者單播,如果用戶更改了配置)尋找集羣中的其它節點,並與之建立連接。這個過程如下圖所示: 

ElasticSearch核心概念

Cluster:集羣。

ES可以作爲一個獨立的單個搜索服務器。不過,爲了處理大型數據集,實現容錯和高可用性,ES可以運行在許多互相合作的服務器上。這些服務器的集合稱爲集羣。

Node:節點。

形成集羣的每個服務器稱爲節點。

Shard:分片。

當有大量的文檔時,由於內存的限制、磁盤處理能力不足、無法足夠快的響應客戶端的請求等,一個節點可能不夠。這種情況下,數據可以分爲較小的分片。每個分片放到不同的服務器上。 
當你查詢的索引分佈在多個分片上時,ES會把查詢發送給每個相關的分片,並將結果組合在一起,而應用程序並不知道分片的存在。即:這個過程對用戶來說是透明的。

Replia:副本。

爲提高查詢吞吐量或實現高可用性,可以使用分片副本。 
副本是一個分片的精確複製,每個分片可以有零個或多個副本。ES中可以有許多相同的分片,其中之一被選擇更改索引操作,這種特殊的分片稱爲主分片。 
當主分片丟失時,如:該分片所在的數據不可用時,集羣將副本提升爲新的主分片。

全文檢索。

全文檢索就是對一篇文章進行索引,可以根據關鍵字搜索,類似於mysql裏的like語句。 
全文索引就是把內容根據詞的意義進行分詞,然後分別創建索引,例如」你們的激情是因爲什麼事情來的」 可能會被分詞成:「你們「,」激情「,「什麼事情「,」來「 等token,這樣當你搜索「你們」 或者 「激情」 都會把這句搜出來。

ES數據架構的主要概念(與關係數據庫Mysql對比)

(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.

ELK是什麼?

ELK=elasticsearch+Logstash+kibana 
elasticsearch:後臺分佈式存儲以及全文檢索 
logstash: 日誌加工、「搬運工」 
kibana:數據可視化展示。 
ELK架構爲數據分佈式存儲、可視化查詢和日誌解析創建了一個功能強大的管理鏈。 三者相互配合,取長補短,共同完成分佈式大數據處理工作。

ElasticSearch特點和優勢

ElasticSearch優勢

1)分佈式實時文件存儲,可將每一個字段存入索引,使其可以被檢索到。 
2)實時分析的分佈式搜索引擎。 
分佈式:索引分拆成多個分片,每個分片可有零個或多個副本。集羣中的每個數據節點都可承載一個或多個分片,並且協調和處理各種操作; 

負載再平衡和路由在大多數情況下自動完成。 
3)可以擴展到上百臺服務器,處理PB級別的結構化或非結構化數據。也可以運行在單臺PC上(已測試) 
4)支持插件機制,分詞插件、同步插件、Hadoop插件、可視化插件等。

ElasticSearch特點

ElasticSearch是一個基於Lucene開發的搜索服務器,具有分佈式多用戶的能力,ElasticSearch是用Java開發的開源項目(Apache許可條款),基於Restful Web接口,能夠達到實時搜索、穩定、可靠、快速、高性能、安裝使用方便,同時它的橫向擴展能力非常強,不需要重啓服務。

ElasticSearch是一個非常好用的實時分佈式搜索和分析引擎,可以幫助我們快速的處理大規模數據,也可以用於全文檢索,結構化搜索以及分析等。

爲什麼要用ElasticSearch?

 ES國內外使用優秀案例

1) 2013年初,GitHub拋棄了Solr,採取ElasticSearch 來做PB級的搜索。 「GitHub使用ElasticSearch搜索20TB的數據,包括13億文件和1300億行代碼」。

2)維基百科:啓動以elasticsearch爲基礎的核心搜索架構。 
3)SoundCloud:「SoundCloud使用ElasticSearch爲1.8億用戶提供即時而精準的音樂搜索服務」。 
4)百度:百度目前廣泛使用ElasticSearch作爲文本數據分析,採集百度所有服務器上的各類指標數據及用戶自定義數據,通過對各種數據進行多維分析展示,輔助定位分析實例異常或業務層面異常。目前覆蓋百度內部20多個業務線(包括casio、雲分析、網盟、預測、文庫、直達號、錢包、風控等),單集羣最大100臺機器,200個ES節點,每天導入30TB+數據。

ElasticSearch相關

Elasticsearch: 權威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

性能esrally工具:使用參考:http://blog.csdn.net/laoyang360/article/details/52155481

相關文章
相關標籤/搜索