撰稿丨千山
在高手林立的數據庫江湖,redis就像一個刺客,或許不如經典數據庫存在感強,但因其高性能的特質而在群英榜中獨占一席。
作為緩存的首選內存數據庫,Redis最近放出了一個大新聞——將磁盤作為分層存儲體系結構的一部分,以降低成本并擴大系統的吸引力。
關鍵在于,Redis 本身是一個內存數據庫,這意味著其數據存儲在RAM中而不是磁盤上。與傳統的基于磁盤的數據庫相比,這提供了更快的讀寫吞吐量和更低的延遲。某種意義上說,Redis的成功正是在于這種“打破常規”。
但如今,Redis又將磁盤納入其存儲體系中,不禁讓人猜測:Redis到底意欲何為?自廢武功還是在下一盤大棋?
1、對抗價格優勢:納入磁盤,降低成本?
早期由于內存價格昂貴等原因,內存數據庫發展較慢。隨著內存技術逐漸成熟,內存成本下降,同時容量穩步擴大,內存數據庫和傳統數據庫混合使用正成為趨勢。Redis就是內存數據庫中的佼佼者。
在2023年Stack Overflow調查中,Redis被評為專業開發人員中最受歡迎的數據庫第六位,最受歡迎的NoSQL數據庫第二位。通過Redis能夠創建緩存以防止主數據庫過載,因此大約23%的專業開發者使用該系統。
可以說,Redis當前已成為藍星上最受歡迎的數據庫之一。不過Redis并不滿足于此。
其首席執行官Rowan Trollope在接受外媒采訪時表示,亞毫秒級分布式系統為開發人員提供了所需的性能,但必須承認的是,為互聯網規模構建的其他系統(如MongoDB)可能更具有價格優勢。
為了解決這個問題,該公司已經創建了一種分層的內存方法,在其內存系統后提供閃存支持。
“我們在磁盤和內存之間只隔了半步。對于某些特定的用例,例如在游戲中,公司可能會讓我們提供他們需要的實時積分排行榜和其他游戲內統計數據。”
然而,在游戲發行的初期熱潮之后,大量用戶將完成游戲,他們的賬戶也會隨之進入休眠狀態,直到新章節或新內容發布時,他們才可能重返游戲。Trollope說,使用閃存可以讓用戶對內存進行動態地分級。
“我們可以將一段時間內未被接觸的較少使用的數據轉移到閃存中,在那里存放一段時間。當用戶最終回來的時候,我們很容易將其從閃存無縫地移回內存中。”
Redis現在計劃將這個概念擴展到基于磁盤的內存,以提供對三層架構的支持。Trollope指出,希望此舉將幫助客戶降低成本并簡化其架構。
2、Redis的野心:無敵是多么寂寞,所以我們要開新地圖
在Trollope看來,Redis的流行在很大程度上要歸功于缺乏競爭。“我們并沒有真正與其他公司競爭。”
當然這一說法有待商榷。至少同為高性能NoSQL數據庫的Aerospike也是風頭正勁。Aerospike的客戶包括索尼娛樂、PayPal和AIrtel。
今年8月,Aerospike 宣布推出圖數據庫 Aerospike Graph。Aerospike Graph 以極高的吞吐量跨數十億個頂點和數萬億個連接提供毫秒多跳圖查詢。基準測試顯示,在一小部分基礎設施上,每秒的吞吐量超過100000次查詢,延遲低于5毫秒。
遺憾的是,Aerospike雖然來勢洶洶,但還欠火候。在Stack Overflow的榜單中,它沒有進入專業開發人員使用的前30個數據庫之列。另外,數據庫業界最權威的排名榜單DB-Engines將Aerospike排在第65位,而Redis排在第6位。
同時,Trollope堅持,要從更宏觀的層面去看,Redis在一條“與眾不同”的賽道上,在這條賽道上,Redis可以說是“一家獨大”。
“我想說的是,細數世界上最流行的數據庫,我們是領先的內存數據庫,沒有其他人能做到這一點。Mongo不這么做。也沒有云廠商這樣做,比如微軟Azure Cosmos DB,或Oracle,或Amazon DynamoDB:他們不是內存數據庫。我們與所有其他排名前十的數據庫一起使用,但我們并沒有真正與它們競爭。”
Stack Overflow 2023 開發者調查報告數據庫TOP10
當在某一領域進入“無敵”狀態,要想更進一步,那就唯有開啟新地圖了。
Redis就是這樣做的。作為緩存數據庫Redis的成功毋庸置疑,但Redis一直在努力擴大其作為通用數據庫的吸引力。
去年11月,Redis 收購了 RESP.App,后者是一個易于使用的 GUI,用于訪問Redis數據庫并執行基本的批量操作,從而簡化開發人員的日常工作。
另外,對Redis的一個主要批評是它缺乏對SQL的支持。Trollope表示,現在已經解決了。RediSQL模塊在Github上是可用的。
在他看來,這是推動Redis“更像你的經典數據庫”的一部分。在未來,將添加對自然語言查詢的支持以及增強的向量和特征存儲功能。
圖窮匕見,Redis的種種行動昭示了其雄心:成為一個出色的配角還不夠,必須要提升其作為主咖的角色份額。
3、開發者異議:他們正在偏離我們選擇Redis的初衷
對于Redis的CEO發出的“推動Redis‘更像經典數據庫’”的表態,開發者中有人表示了理解,認為這可能是順應市場需求的選擇。
“數據‘存儲’之間的界限正在變得模糊。我以前見過x團隊需要一個快速的鍵值存儲,所以顯而易見的選擇是Redis。一年過去了,產品在不斷發展,開發者想要做一些‘經典’的查詢。也許在Redis中保留它是有意義的,因為它支持你需要的查詢,而不是遷移/復制到整個其他系統。”
但更多人的第一反應是:這似乎偏離了人們使用Redis的初衷。
至今被引為美談的Redis的誕生,正是由于Redis之父Salvatore Sanfilippo對數據庫“缺乏經驗”,這才使他敢于打破“良好”數據庫工程的各種神圣規則,從而創建Redis。而很多開發人員最初被Redis吸引,選擇使用Redis,也正是因為它不像所謂“經典數據庫”。
還有人對目前Redis的發展走向表示了強烈反對,他主張“Redis的一大優點是它沒有SQL數據庫的開銷”。
“我使用Redis和MySQL一起構建web應用程序。當你需要在服務器端存儲臨時或任意數據時,Redis非常出色,沒有MySQL之類的開銷。對于我們來說,我們在應用程序中為用戶創建Redis鍵,然后將序列化的數據寫入該鍵。讓數據進出這個結構都非常簡單,更不用說速度了。通常都是不需要持久化的數據,不過我相信如果有必要的話也可以寫入磁盤。我不想編寫SQL樣式的查詢來讀取或寫入這樣的數據。對于我所描述的數據類型,我絕對不希望也不需要MySQL提供的事務或任何‘安全’特性。”
這位開發者強調:“Redis目前的形式很好,有很多不同的用例。沒有絕對正確或錯誤的使用方法,除了它絕對不能替代像MySQL這樣的東西。因為不同的工具適用于不同的工作。”
4、結語:性能為王,但絕不甘于只做一個高性能的緩存數據庫
Redis最引以為傲的,可能就是其開辟了一條有別于傳統數據庫的新路,并成功在競爭堪稱慘烈的數據庫賽道上存活并壯大了起來。“高性能”的特質迄今為止仍是其標志和支柱。
性能為王并非口號,而且隨著時間的推移只會越發嚴格。你永遠不會聽到一個老板說,“我希望我們的數據庫慢一點”。如何讓數據庫易開發、低延時、可擴展且面向未來才是更重要的。
不過就像Redis在其官方博文中提到的:Redis 是一個很好的緩存數據庫,但擴展Redis作為主數據庫的角色,從而讓開發人員在構建應用程序時領先一步,才是其未來發展的愿景。到底結果如何,我們且觀后效。
參考鏈接:
https://www.theregister.com/2023/10/19/redis_disk_support/
https://news.ycombinator.com/item?id=37940484
https://levelup.gitconnected.com/why-redis-is-miraculously-optimized-5d813e02e62b