撰稿丨千山
在高手林立的資料庫江湖,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作為主資料庫的角色,從而讓開發人員在構建應用程式時領先一步,才是其未來發展的願景。到底結果如何,我們且觀後效。