首頁 > 資料庫 > Redis > es和redis區別

es和redis區別

藏色散人
發布: 2022-05-13 12:04:45
原創
19952 人瀏覽過

es和redis區別

es與redis差異

ElasticSearch

課程推薦→:《elasticsearch全文搜尋實戰》(實戰影片)

來自課程《千萬級資料並發解決方案(理論實戰)》

相較於MongoDB和Redis,晚一年發布的ES可能知名度要低一些,但是ES在搜尋引擎領域的名聲絕對是響噹噹的。相較於其他高大上的資料庫產品,ES的出身要屌絲很多。

ES的創建者Shay Banon曾經是一個失業的屌絲程式設計師,在無事可做的時候為了方便老婆搜尋食譜而創建了ES(當然,當時還不叫ES)。不料無心插柳柳成蔭,成就了今天最熱門的搜尋引擎資料庫,果然妹子才是程式設計師工作的最大動力啊!

ES也特別成立了自己的Elastic公司已經獲得數億美金融資,當年的屌絲程式設計師Shay Banon也早已逆襲成為CEO並走上人生巔峰。各位程式設計師看官讀完這個故事是不是也已經開始內心澎湃的想像自己出任CEO迎娶白富美那一天了?

ES的特點,正如其名,那就是搜尋。嚴格的說,ES不是一個資料庫,而是一個搜尋引擎,ES的各個方面也都是圍繞著搜尋設計的。 ES支持全文搜索,這裡簡單解釋下什麼是全文搜索:對於“我在北京的一家互聯網公司工作”這樣的數據,如果你搜索“北京”、“互聯網”、“工作”這些關鍵字都能命中這資料的話,這就是全文搜索,你每天都在用的百度、Google都屬於全文搜尋。

值得一提的是,ES的全文搜尋對中文也有很好的支援(光是中文分詞器就有很多種),絕對能夠滿足國內大多數人的全文搜尋需求。除了搜尋之外,ES還會自動的替你對所有字段建立索引,以實現高性能的複雜聚合查詢,因此只要是存入ES的數據,無論再復雜的聚合查詢也可以獲得不錯的性能,而且你再也不用為如何建立各種複雜索引而頭痛了。

說了這麼多ES的優點,你是不是覺得ES簡直萬能了?

可惜不是的,ES也有很多的短處,最明顯的就是欄位類型無法修改、寫入效能較低和高硬體資源消耗。前邊講到ES會自動的替你建立索引,儘管這能給全文搜索以及聚合查詢帶來很多好處還能替你省了建索引這一麻煩事,但是這個特性也會帶來一堆問題。

ES需要在創建字段前要預先建立Mapping,Mapping中包含每個字段的類型信息,ES需要根據Mapping為字段建立合適的索引。由於這個Mapping的存在,ES中的字段一但建立就不能再修改類型了。

(例如,你建立的資料表的某個欄位忘了加全文搜索,你想暫時加上,但是表已經建好並且已經有很多資料了,這時候該怎麼辦呢?不好意思,你只能把整個資料表刪了再重建一遍!)

因此,ES在資料結構靈活度上高於MySQL但遠不如MongoDB。 ES的缺點還不只這些,自動建立索引使得ES的寫入效能也收到了影響,要明顯低於MongoDB。

對於同樣的資料ES佔用的儲存空間也要明顯大於MongoDB(建那麼多索引能不佔空間嗎?),對硬體資源的消耗也是非常厲害,大資料量下64G記憶體SSD基本是標配,算得上是資料庫中的貴族服務了,因此如果你的老闆很小氣,對於ES的選用可要慎重嘍!

ES的全文搜尋特性使它成為建立搜尋引擎的利器。除此之外,ES很好的支援了複雜聚合查詢這項特點也使得ES非常適合拿來做資料分析使用。

其實,ES還專門做了與自己配套的ELK套裝,給你提供從日誌收集到資料視覺化分析的一條龍服務,絕對是建構高大上資料分析平台的利器。

但是,ES的高成本和低寫入效能這些缺點也注定了它不適合用在那些資料價值不高、對寫入效能有要求、資料量大而成本受限的場景中。

Redis

Redis是現在最熱門的key-value資料庫。它與MongoDB同在2009年發布,也同樣是早期大數據時代的資料庫代表作。

Redis的最大特點當然就是key-value儲存所帶來的簡單和高效能了。所謂key-value存儲,就是每一筆記錄只包含一個用於查詢數據的Key,以及與之對應的存儲數據的value,就如同現實生活中的門牌號與住戶,而沒有諸如表、字段這些常規數據庫中必需有的複雜概念,所有的查詢都只依賴key值。

因此,key-value資料庫可謂是資料庫中資料結構最簡單的一種,也得益於這種簡單的結構,再加上Redis會把所有資料載入到記憶體中的,Redis能得到遠高於MongoDB這類常規資料庫的讀寫效能。當然,Redis的功能還不只key-value儲存這麼簡單,相較它的key-value前輩Memcached,Redis還支援資料持久化,list、set等多種資料結構,主從複製備份等一些列功能,因此Redis絕對稱得上是key-value資料庫中功能最全面、最簡單易用的款。

Redis的key-valule儲存帶來了效能這個優勢,但也為複雜查詢帶來了許多限制。由於閹割掉了資料表、欄位這樣的重要特性,且所有的查詢都依賴key,因此Redis無法提供常規資料庫所具備的多列查詢、區段查詢等複雜查詢功能。

同時,由於Redis需要把資料存在記憶體中,這也大大限制了Redis可儲存的資料量,這也決定了Redis難以用在資料規模很大的應用程式場景中。

Redis犧牲了常規資料庫中的資料表、複雜查詢等功能,換來了很大的效能提升,特別適合那些對讀寫效能要求極高,且資料表結構簡單(key-value 、list、set之類)、查詢條件也同樣簡單的應用場景。

如果你的資料表結構還蠻複雜,你還常常需要做一些複雜查詢操作,那你最好還是老實實用MongoDB或SQL吧。

更多Redis相關知識,請造訪Redis使用教學欄位!

以上是es和redis區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板