掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
入行 Elastic-Stack 技術(shù)棧很久了,為了免于知識匱乏眼光局限,有必要到外面的世界看看,豐富自己的世界觀。

成都創(chuàng)新互聯(lián)專注于南召網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供南召營銷型網(wǎng)站建設(shè),南召網(wǎng)站制作、南召網(wǎng)頁設(shè)計、南召網(wǎng)站官網(wǎng)定制、微信平臺小程序開發(fā)服務(wù),打造南召網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供南召網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
圖片來自 Pexels
本篇內(nèi)容從 Elastic 的競爭產(chǎn)品角度分析探討:
Elasticsearch 當前熱度排名很高
本文僅代表個人的觀點,不代表社區(qū)技術(shù)陣營觀點,無意口水之爭,限于本人的經(jīng)驗知識有限,可能與讀者觀點認知不一致。
競爭產(chǎn)品
Elasticseach 從做搜索引擎開始,到現(xiàn)在主攻大數(shù)據(jù)分析領(lǐng)域,逐步進化成了一個全能型的數(shù)據(jù)產(chǎn)品。
在 Elasticsearch 諸多優(yōu)秀的功能中,與很多數(shù)據(jù)產(chǎn)品有越來越多的交叉競爭,有的功能很有特色,有的功能只是附帶,了解這些產(chǎn)品特點有助于更好的應(yīng)用于業(yè)務(wù)需求。
Elasticsearch 競爭圖譜示意圖
Lucene
Lucene 是一個搜索的核心庫,Elastic 也是在 Lucene 基礎(chǔ)之上構(gòu)建,它們之間的競爭關(guān)系是由 Lucene 本身決定的。
在互聯(lián)網(wǎng) 2.0 時代,考驗各互聯(lián)網(wǎng)公司最簡單的技術(shù)要求,就是看他們的搜索做的怎么樣,那時大家的做法幾乎一樣,都基于 Lucene 核心庫構(gòu)建一套搜索引擎,剩下的就看各公司的開發(fā)者們的水平。
筆者有幸在 2012 年之前,基于 Lucene 做過垂直行業(yè)的搜索引擎,遇到很多問題有必要說一下:
Lucene 內(nèi)部索引構(gòu)建與查詢過程
Elasticsearch 與 Lucene 核心庫競爭的優(yōu)勢在于:
Elastic 近年的快速發(fā)展,市面上已經(jīng)很少發(fā)現(xiàn)基于 Lucene 構(gòu)建搜索引擎的項目,幾乎清一色選擇 Elasticsearch 作為基礎(chǔ)數(shù)據(jù)庫服務(wù)。
由于其開源特性,廣大云廠商也在此基礎(chǔ)上定制開發(fā),與自己的云平臺深度集成,但也沒有獨自發(fā)展一個分支。本次的競爭中,Elasticsearch 完勝。
Solr
Solr 是第一個基于 Lucene 核心庫功能完備的搜索引擎產(chǎn)品,誕生遠早于 Elasticsearch。
早期在全文搜索領(lǐng)域,Solr 有非常大的優(yōu)勢,幾乎完全壓倒 Elastic,在近幾年大數(shù)據(jù)發(fā)展時代,Elastic 由于其分布式特性,滿足了很多大數(shù)據(jù)的處理需求。
特別是后面 ELK 這個概念的流行,幾乎完全忘記了 Solr 的存在,雖然也推出了 Solr-Coud 分布式產(chǎn)品,但已經(jīng)基本無優(yōu)勢。
接觸過幾個數(shù)據(jù)類公司,全文搜索都基于 Solr 構(gòu)建,且是單節(jié)點模式,偶然出現(xiàn)一些問題,找咨詢顧問排查問題,人員難找,后面都遷移到 Elasticsearch 之上。
現(xiàn)在市面上幾乎大大小小公司都在使用 Elasticsearch,除了老舊系統(tǒng)有的基于 Solr 的,新系統(tǒng)項目應(yīng)該全部是 Elasticsearch。
個人認為有以下幾個原因:
Solr 產(chǎn)品功能模塊內(nèi)部架構(gòu)圖
本次競爭中,Elasticsearch 完勝。
RDBMS
關(guān)系型數(shù)據(jù)庫與 Elasticsarch 相比主要優(yōu)點是事務(wù)隔離機制無可替代,但其局限性很明顯。
主要幾個方面如下:
若數(shù)據(jù)無需嚴格事務(wù)機制隔離,個人認為都可以采用 Elasticsearch 替代。若數(shù)據(jù)既要事務(wù)隔離,也要查詢性能,可以采用 DB 與 ES 混合實現(xiàn)。
RDBMS 與 ES 各自優(yōu)勢示意圖
OpenTSDB
OpenTSDB 內(nèi)部基于 HBase 實現(xiàn),屬于時間序列數(shù)據(jù)庫,主要針對具有時間特性和需求的數(shù)據(jù),進行過數(shù)據(jù)結(jié)構(gòu)的優(yōu)化和處理,從而適合存儲具有時間特性的數(shù)據(jù),如監(jiān)控數(shù)據(jù)、溫度變化數(shù)據(jù)等。
小米公司開源監(jiān)控體系 open-falcon 的就是基于 OpenTSDB 實現(xiàn)。
OpenTSDB 時間序列數(shù)據(jù)庫內(nèi)部實現(xiàn)
Elastic 產(chǎn)品本身無意時間序列這個領(lǐng)域,隨著 ELK 的流行,很多公司采用ELK來構(gòu)建監(jiān)控體系,雖然在數(shù)值類型上不像時間序列數(shù)據(jù)庫做過特別處理,但由于其便利的使用,以及生態(tài)技術(shù)棧的優(yōu)勢,我們也接受了這樣的事實。
Elasticsearch 構(gòu)建時間序列很簡單,性能也相當不錯:
HBase
HBase 是列式數(shù)據(jù)庫的代表,其內(nèi)部有幾個致命設(shè)計大大限制了它的應(yīng)用范圍:
關(guān)于其各種技術(shù)原理就不多說了,說說它的一些使用情況。
公司所屬物流速運行業(yè),一個與車輛有關(guān)的項目,記錄所有車輛行駛軌跡,車載設(shè)備會定時上報車子的軌跡信息,后端數(shù)據(jù)存儲基于 HBase,數(shù)據(jù)量在幾十 TB 級以上。
由于業(yè)務(wù)端需要依據(jù)車輛軌跡信息計算它的公里油耗以及相關(guān)成本,所以要按查詢條件批量查詢數(shù)據(jù),查詢條件有一些非 Rowkey 的字段,如時間范圍,車票號,城市編號等,這幾乎無法實現(xiàn),原來暴力的做過,性能問題堪憂。
此項目的問題首先也在于 Rowkey 難設(shè)計滿足查詢條件的需求,其次是二級索引問題,查詢的條件很多。
如果用列式數(shù)據(jù)庫僅限于 Rowkey 訪問場景,其實采用 Elastic 也可以,只要設(shè)計好 _id,與 HBase 可以達到相同的效果。
如果用列式數(shù)據(jù)庫查詢還需要引入三方組件,那還不如直接在 Elasticsearch 上構(gòu)建更直接。
除非對使用列式數(shù)據(jù)庫有非??量痰囊?,否則 Elasticsearch 更具備通用性,業(yè)務(wù)需求場景適用性更多。
列式數(shù)據(jù)庫內(nèi)部數(shù)據(jù)結(jié)構(gòu)示意圖
MongoDB
MongoDB 是文檔型數(shù)據(jù)庫的代表,數(shù)據(jù)模型基于 Bson,而 Elasticsearch 的文檔數(shù)據(jù)模型是 Json,Bson 本質(zhì)是 Json 的一種擴展,可以相互直接轉(zhuǎn)換,且它們的數(shù)據(jù)模式都是可以自由擴展的,基本無限制。
MongoDB 本身定位與關(guān)系型數(shù)據(jù)庫競爭,支持嚴格的事務(wù)隔離機制,在這個層面實際上與 Elasticsearch 產(chǎn)品定位不一樣,但實際工作中,幾乎沒有公司會將核心業(yè)務(wù)數(shù)據(jù)放在 MongoDB 上,關(guān)系型數(shù)據(jù)庫依然是第一選擇。
若超出這個定位,則 Elasticsearh 相比 MongoDB 有如下優(yōu)點:
公司剛好有個項目,原來數(shù)據(jù)層基于 MongoDB 設(shè)計構(gòu)建的,查詢問題不少 ,后面成功遷移到 Elasticsearch 平臺上,服務(wù)器數(shù)據(jù)量從 15 臺降低到 3 臺,查詢性能還大幅度提升十倍。
詳細可閱讀筆者另一篇文章《為什么要從MongoDB遷移到Elasticsearch?》拋開數(shù)據(jù)事務(wù)隔離,Elasticsearch 可以完全替代 MongoDB。
ClickHouse
ClickHouse 是一款 MPP 查詢分析型數(shù)據(jù)庫,近幾年活躍度很高,很多頭部公司都引入其中。
我們?yōu)槭裁匆肽兀蚩赡芨渌^部公司不太一樣,如下:
ClickHouse 與 Elasticsearch 一樣,都采用列式存儲結(jié)構(gòu),都支持副本分片。
不同的是 ClickHouse 底層有一些獨特的實現(xiàn),如下:
ClickHouse 在大數(shù)據(jù)平臺中的位置
Druid
Durid 是一個大數(shù)據(jù) MPP 查詢型數(shù)據(jù)產(chǎn)品,核心功能 Rollup,所有的需要 Rollup 原始數(shù)據(jù)必須帶有時間序列字段。
Elasticsearch 在 6.3.X 版本之后推出了此功能,此時兩者產(chǎn)品形成競爭關(guān)系,誰高誰下,看應(yīng)用場景需求。
Druid 樣本數(shù)據(jù),必須帶有 time 時間字段。
筆者之前負責過公司所有 Elasticsearch 技術(shù)棧相關(guān)數(shù)據(jù)項目,當時也有碰到一些實時聚合查詢返回部分數(shù)據(jù)的需求。
但我們的需求不太一樣,索引數(shù)據(jù)屬于離線型更新,每天都會全部刪除并重新創(chuàng)建索引插入數(shù)據(jù)。
此時使用 Elastic 的版本是 6.8.X,僅支持離線型數(shù)據(jù) Rollup,所以此功能沒用上,Elastic 在 7.2.X 版本之后才推出實時 Rollup 功能。
Druid 更加專注,產(chǎn)品設(shè)計圍繞 Rollup 展開,Elastic 只是附帶。
Druid 支持多種外接數(shù)據(jù),直接可以對接 Kafka 數(shù)據(jù)流,也可以直接對接平臺自身內(nèi)部數(shù)據(jù);而 Elastic 僅支持內(nèi)部索引數(shù)據(jù),外部數(shù)據(jù)需要借助三方工具導(dǎo)入到索引里。
Druid 在數(shù)據(jù) Rollup 之后,會丟棄原始數(shù)據(jù);Elastic 在原有索引基礎(chǔ)之后,生成新的 Rollup 之后的索引數(shù)據(jù)。
Druid 與 Elastic 的技術(shù)架構(gòu)非常類似,都支持節(jié)點職責分離,都支持橫向擴展。
Druid 與 Elastic 在數(shù)據(jù)模型上都支持倒排索引,基于此的搜索與過濾。
Druid 產(chǎn)品技術(shù)架構(gòu)體系示意圖
關(guān)于 Rollup 這個大數(shù)據(jù)分析領(lǐng)域,若有大規(guī)模的 Rollup 的場景需求,個人更傾向于 Druid。
結(jié)語
總結(jié):
注:內(nèi)容來源于筆者實際工作中運用多種技術(shù)棧實現(xiàn)場景需求,得出的一些實戰(zhàn)經(jīng)驗與總結(jié)思考,提供后來者借鑒參考。
本文圍繞 Elastic 的競爭產(chǎn)品對比僅限概要性分析,粒度較粗,深度有限,之后會有更加專業(yè)深入競爭產(chǎn)品分析文章,敬請期待。
作者:李猛(ynuosoft)
簡介:Elastic-stack 產(chǎn)品深度用戶,ES 認證工程師,2012 年接觸 Elasticsearch,對 Elastic-Stack 開發(fā)、架構(gòu)、運維等方面有深入體驗,實踐過多種 Elasticsearch 項目,最暴力的大數(shù)據(jù)分析應(yīng)用,最復(fù)雜的業(yè)務(wù)系統(tǒng)應(yīng)用;業(yè)余為企業(yè)提供 Elastic-Stack 咨詢培訓(xùn)以及調(diào)優(yōu)實施。
編輯:陶家龍
出處:轉(zhuǎn)載自微信公眾號 DBAplus 社群(ID:dbaplus)

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流