原文:ES(入門二):ElasticSearch簡介及其發展歷史
前言
在上篇文章ES(入門一):走進ElasticSearch中已經dui ES的簡介做了介紹。這篇文章還是想就“ElasticSearch簡介及其發展歷史”作進一步補充。希望可以對ES的背景有更深的了解,個人覺得背景的了解也會有助于后面系統的學習。
背后的公司、愿景
我們都知道ES它是一款開源的、近實時、高性能的分布式搜索引擎,但是很多人可能不知道其背后的公司已經在紐約上市了,去年10月份的時候美國股市十分的蕭條(很多人可能知道這個),但是有家公司他在上市首天開盤的漲幅就達到了94%,這其實就是ES背后的公司Elastic。
那我們先來看一個數字,ES為什么在資本市場受到這樣的追捧:
- 從開源到上市
- ElasticSearch 客戶
-
DBRanking2019年5月的數據庫評測中 ,ES在Search Engine(搜索引擎)分類中名列第一
圖片.png
ElasticSearch簡介
起源 - Lucene
這個看著很帥氣的男人他叫Doug Cutting,是Lucene的創始人,同時他也是Hadoop的創始人,被稱為Hadoop之父。重點還是來看下Lucene有哪些特點:
(1)基于Java語言開大的搜索引擎類庫
(2)創建于1999年,2005年成為Apache頂級開源項目
(3)Lucene具有高性能、以擴展的有點
(4)Lucene的局限性:
- 只能基于Java語言開發
- 類庫的接口學習成本高
- 原生并不支持水平擴展(這對于搜索引擎來說是一個非常大的問題)
ElasticSearch的誕生
Shay Banon是ElasticSearch的創始人,他曾說過:“搜索是每一個軟件都必須擁有的功能”
2004年Shay Banon基于Lucene開發了Compass(ES的前身)
2010年Shay Banon重寫了Compass,取名ElasticSearch:
- 支持分布式,可水平擴展
- 降低全文檢索的學習難度(即提供了Rest API風格的接口),它也可以被任何編程語言調用
ElasticSearch的分布式架構
從這張圖我們可以看出來:我們可以很方便的在自己的PC上安裝ES環境,但數據變大的時候我們可以迅速擴展到數百個節點。
簡單歸納:
- 集群規模可以從單個節點擴展至數百個節點
- 高可用 & 水平擴展:從服務和數據兩個維度
- 支持不同的節點類型:支持Hot & Warm架構
支持多種方式集成接入
- 多種編程語言的類庫(https://www.elastic.co/guide/en/elasticsearch/client/index.html)
Java / .NET / Python / Ruby / PHP / Groovy /Perl - RESTful API v.s Transport API: 9200 v.s 9300端口(建議使用RESTful API)
- 最新版支持JDBC & ODBC接入方式
ElasticSearch提供的主要功能
- 海量數據的分布式存儲及集群管理能力:服務于數據的高可用,水平擴展
- 近實時搜索,性能卓越:結構化 / 全文 / 地理位置 / 自動完成
- 海量數據的近實時分析: 指聚合功能
結合一個真實事例看下其使用的場景:
這是一個個人比較喜歡的一個酒店訂閱的平臺,使用ES可以實現酒店的搜索,通過聚合(左側)可以根據價格區間可以高效的篩選滿足要求的結果列表。
Elastic的版本升級及重要版本的新特性
- 0.4:2010年2月第一次發布
- 1.0:2014年1月
- 2.0:2015年10月
- 5.0:2016年10月
- 6.0:2017年10月
- 7.0:2019年4月
新特性5.X
- Lucene 6.x(表示此時以來的Lucene版本)性能升級,默認打分機制從TF-IDF(計算分詞相似的一個算法)改為BM 25
- 支持Ingest節點/Painiess Scripting / Completion suggested支持 / 原生的Java REST客戶端
- Type標記成deprecated(過時,以前我們在創建索引的時候是需要創建一個Type標記的,現在可以不創建它),支持了keyword類型
- 性能優化:
(1)內部引擎移除了避免同一文檔并發更新的競爭鎖,帶來15% - 20%的性能提升
(2)支持分片上聚合的緩存
(3)新增了Prefile API
新特性6.X
- Lucene 7.x
- 新功能
(1)跨級群復制(CCR)
(2)索引聲明周期管理
(3)SQL的支持 - 更友好的升級及數據遷移
(1)在主要版本之間的遷移更為簡化,體檢升級
(2)全新的基于操作的數據復制框架,可加快恢復數據、 - 性能優化
(1)有效存儲稀疏字段的新方法,降低了存儲成本
(2)在索引時進行排序,可加快排序的查詢性能
新特性 7.X
- Lucene 8.0
- 重大改進 - 正式廢除單個索引下多Type的支持
- 7.1開始,Security功能免費使用
- ECK - Elasticsearch Operator on Kubernetes
- 新功能
(1)New Cluster coordination
(2)Feature-Complete High Level REST Client
(3)Script Score Query、 - 性能優化
(1)默認的Permary Shard數從5改為1,避免Over Sharding
(2)性能優化,更快的Top K
總結
ES是一個開源的搜素和分析引擎,有很好的的性能,天生支持水平個擴展;另外ES接口也支持多種客戶端接入語言;有非常好的社區的支撐;目前以前有超過3.5億次的下載量,原因是ES背后有一個很強的公司支撐。
歡迎關注更多個人博客:RelaxHeart網 - Tec博客