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