前言: Elasticsearch是當前搜索引擎市場上最受歡迎的高擴展分佈式搜索引擎!本文從核心知識、工作原理、如何學習等幾個方面進行詳細梳理,還有視頻教程分享,歡迎關注,討論!
一、ElasticSearch是為了解決什麼問題而產生?
- 想一想:億級數據我們如何檢索?
當系統數量量上了幾十億上百億,我們一般會這樣進行思考:
1)數據庫優化,優化到極致的時候還是不能解決問題,怎麼辦?
答:mysql或者mongodb還有緩存!
2)如何解決單點問題?
答:F5,ZK,MQ
3)怎麼確保數據安全性?
答: 熱冷備,異地多活
4)檢索時間太長的問題如何解決?
答:分表分庫
5)數據統計分析如何解決?
答:異步 、非實時 - 傳統應對方案
1)主從備份解決安全性問題
2)通過數據庫代理解決單點故障問題和查詢分發問題
- Nosql應對方案
1)通過副本備份保證數據安全
2)通過節點競爭解決單節點問題
3)先檢索分片信息,再分發到各個節點。
- 把數據存入內存(是否是最佳方案?)
ES另闢蹊徑,把數據放入內存,但是我們知道這樣是不可靠的,實際上也不太現實,當我們的數據達到一定量級的時候,內存完全不夠用,擴充內存的巨大成本是不可接受的。
為了解決問題,我們需找了其他方式(ES方式):
1)有序存儲數據
2)數據和索引分離
3)壓縮數據
二、基礎入門
- ElasticSearch簡介
1)elasticsearch是一個基於Lucene的高擴展的分佈式搜索引擎,開箱即用,非常方便!
2)elasticsearch隱蔽了Lucene的複雜性,對外提供Restful 風格的API來操作檢索。 - 解決痛點
1)擴展性好,能夠部署近百臺服務器集群,處理TB以上級數據
2)幾乎可以實現實時的去檢索數據。 - 工作原理
1)索引結構
下圖是ElasticSearch的索引結構,黑色部分屬於物理結構,橙色部分屬於邏輯結構,邏輯結構是為了更好的解釋ElasticSearch的工作原理以及更好的使用物理結構。
- 核心概念
1)Cluster:集群
ES支持集群搭建
2)Node:節點
形成集群的每個服務器
3)Shard(分片)
當有大量的doc存在時,由於內存空間不足,磁盤IO能力有限,沒有辦法足夠快的響應請求,單節點已經無法滿足需求。這種情況下,ES會把數據分為多個小的分片,將這些分片放到不同的服務器上。當你檢索的時候,首先獲取分佈在不同分片上的索引,ES會把查詢分發給相關的分片,並將結果集合起來,這個過程對用戶來說是無感且透明的!
4)Replia(副本)
為了提高查詢的吞吐量和實現高可用,ES設計了分片副本。副本就是把分片進行精確複製,每個分片可以沒有或者多個副本。ES中可以有許多相同的分片,系統會選擇一個分片作為主分片。 當主分片意外丟失,集群就會把其中一個副本提升為新的主分片。
5)全文檢索
全文檢索就是對一篇文章進行檢索,可以根據關鍵字進行檢索,類似於關係型數據庫中的的like語句。 全文索引就是把內容根據詞表進行分詞,然後創建索引!
三、應用場景
- ELK是什麼東東?
ES目前最大的引用場景莫過於分佈式日誌分析系統ELK(elasticsearch+Logstash+kibana )
logstash: 日誌收集
kibana:日誌數據分析可視化
ELK架構為數據分佈式存儲系統、可視化查詢界面和日誌解析機制創建了一個功能強大的管理鏈。 三者相互配合,相輔相成,取長補短,共同完成分佈式大數據處理工作。 - 應用案例
國內外很多優秀的案例,比比皆是,Github就是使用ES搭建,危機百科的核心基礎也是ES,百度目前也官方使用ES作為文本數據分析,每天處理30TB的數據。 - 我們也可以有?
我們必須可以有,今年ElasticSearch發展飛速,已經超越其最初的搜索引擎的角色定位,現在已經增加了數據聚合分析和可視化特性,如果你有數以億計的文檔需要通過關鍵詞定位,ES肯定是最佳選擇。當然你可以把他當緩存服務使用,一樣優秀。 - 什麼場景使用ES?
業務不對操作的事性務有特殊要求,權限也不需要非常細,因為ES的權限屬於短板。我們不需要大量的原子操作,還有ES可以完美解決業務流程多版本聚合的問題。
四、如何部署
- Liunx平臺安裝:
1)下載:https://www.elastic.co/cn/downloads/
2)解壓啟動:bin/elasticsearch -d (後臺運行) - windows平臺下安裝:
https://blog.csdn.net/linkkb/article/details/82805145
五、出現問題如何解決
出現問題,我們可以到ES中文社區提問,會有很多熱心的夥伴幫助你:http ://elasticsearch.cn/
六、視頻教程分享(無門檻)
結語: 該文章屬於系列文章,筆者會持續更新,隨後也會發SpringBoot2.0系列文章,還有SpringCloud Alibaba版本系列文章,大家可以持續關注。
關注:私信回覆關鍵字:ES教程 獲取資源!
閱讀更多 程序員八阿哥 的文章