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