目錄
es與redis差異
首頁 資料庫 Redis es和redis區別

es和redis區別

Jul 06, 2019 pm 01:45 PM
redis

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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

redis集群模式怎麼搭建 redis集群模式怎麼搭建 Apr 10, 2025 pm 10:15 PM

Redis集群模式通過分片將Redis實例部署到多個服務器,提高可擴展性和可用性。搭建步驟如下:創建奇數個Redis實例,端口不同;創建3個sentinel實例,監控Redis實例並進行故障轉移;配置sentinel配置文件,添加監控Redis實例信息和故障轉移設置;配置Redis實例配置文件,啟用集群模式並指定集群信息文件路徑;創建nodes.conf文件,包含各Redis實例的信息;啟動集群,執行create命令創建集群並指定副本數量;登錄集群執行CLUSTER INFO命令驗證集群狀態;使

redis數據怎麼清空 redis數據怎麼清空 Apr 10, 2025 pm 10:06 PM

如何清空 Redis 數據:使用 FLUSHALL 命令清除所有鍵值。使用 FLUSHDB 命令清除當前選定數據庫的鍵值。使用 SELECT 切換數據庫,再使用 FLUSHDB 清除多個數據庫。使用 DEL 命令刪除特定鍵。使用 redis-cli 工具清空數據。

redis指令怎麼用 redis指令怎麼用 Apr 10, 2025 pm 08:45 PM

使用 Redis 指令需要以下步驟:打開 Redis 客戶端。輸入指令(動詞 鍵 值)。提供所需參數(因指令而異)。按 Enter 執行指令。 Redis 返迴響應,指示操作結果(通常為 OK 或 -ERR)。

redis怎麼使用鎖 redis怎麼使用鎖 Apr 10, 2025 pm 08:39 PM

使用Redis進行鎖操作需要通過SETNX命令獲取鎖,然後使用EXPIRE命令設置過期時間。具體步驟為:(1) 使用SETNX命令嘗試設置一個鍵值對;(2) 使用EXPIRE命令為鎖設置過期時間;(3) 當不再需要鎖時,使用DEL命令刪除該鎖。

redis怎麼讀取隊列 redis怎麼讀取隊列 Apr 10, 2025 pm 10:12 PM

要從 Redis 讀取隊列,需要獲取隊列名稱、使用 LPOP 命令讀取元素,並處理空隊列。具體步驟如下:獲取隊列名稱:以 "queue:" 前綴命名,如 "queue:my-queue"。使用 LPOP 命令:從隊列頭部彈出元素並返回其值,如 LPOP queue:my-queue。處理空隊列:如果隊列為空,LPOP 返回 nil,可先檢查隊列是否存在再讀取元素。

redis底層怎麼實現 redis底層怎麼實現 Apr 10, 2025 pm 07:21 PM

Redis 使用哈希表存儲數據,支持字符串、列表、哈希表、集合和有序集合等數據結構。 Redis 通過快照 (RDB) 和追加只寫 (AOF) 機制持久化數據。 Redis 使用主從復制來提高數據可用性。 Redis 使用單線程事件循環處理連接和命令,保證數據原子性和一致性。 Redis 為鍵設置過期時間,並使用 lazy 刪除機制刪除過期鍵。

redis怎麼讀源碼 redis怎麼讀源碼 Apr 10, 2025 pm 08:27 PM

理解 Redis 源碼的最佳方法是逐步進行:熟悉 Redis 基礎知識。選擇一個特定的模塊或功能作為起點。從模塊或功能的入口點開始,逐行查看代碼。通過函數調用鏈查看代碼。熟悉 Redis 使用的底層數據結構。識別 Redis 使用的算法。

redis怎麼做消息中間件 redis怎麼做消息中間件 Apr 10, 2025 pm 07:51 PM

Redis 作為消息中間件,支持生產-消費模型,可持久化消息並保證可靠交付。使用 Redis 作為消息中間件可實現低延遲、可靠和可擴展的消息傳遞。

See all articles