持久性內存將顛覆資料庫
作者:Kyle J. Davis是Redis Labs的技術營銷經理。
我在1999年開始上大學,那一年我學習SQL。我還記得設想在一台伺服器上開發一個小小的應用程序,一行SQL觸發了一連串驚人的操作。這種查詢語言向磁碟控制器發出了命令,磁碟控制器繼而在磁碟上移動驅動臂。磁頭能夠獲取之前寫入到磁性介質的數據。數據沿著線路高速發回到控制器,並通過操作系統發回到我的軟體。這一切出現在短短几秒鐘內。
那是大概20年前的事了。現在的學生會有全然不同的體驗,一切都不一樣。旋轉介質的微機械方面被固態硬碟(SSD)取代。SSD是固態的,它們沒有電機或驅動臂,完全是悄然無聲的快閃記憶體。不過深入挖掘一番,它們仍模仿旋轉磁碟的機械部件。資料庫和文件系統仍然是為旋轉磁碟世界設計的――大多數資料庫軟體專門設計成在移動介質世界的機械局限性範圍內提供持久性。
現在,快進到20年後的2039年。我確信我們今天所做的事情將來看起來像撥號連接一樣愚蠢。我不是未來學家,而是資料庫人士。我考慮的是數據、如何存儲和檢索數據。
由於如今持久性內存技術成為現實,應用程序擺脫了物理介質所帶來的束縛。隨著我們對於資料庫執行的操作的認識發生轉變,情況開始變得模糊起來。持久性內存運行起來更像RAM,而不是像其他任何東西。此外,文件概念變得不那麼重要了,因為文件系統(旋轉磁碟時代的另一個遺迹)並不總是掉電的持久性數據所必不可少的。
有鑒於此,由於沒有旋轉介質的負擔,資料庫有點不一樣。以下是內存計算未來的幾個基本要素:
集群――持久性內存會比SSD更昂貴(至少最初是這樣)。因此,對於即使中等大小的數據而言,仍然需要有一個跨多台機器的數據集。這需要出現在可以安全地提供數據持久性的最少數量的機器上。
協議和網路的優化――如果你消除了一個系統的所有類別的瓶頸,網路之類的部分就變得非常顯然。開銷很低的協議以及客戶端與伺服器之間可以非同步訪問的持久性連接,可確保內存數據存儲的優勢沒有丟失。
高可用性――雖然即便基於磁碟的系統也常常需要高可用性,內存系統的更高吞吐量意味著哪怕短暫的中斷也可能意味著數十億個請求未得到處理。
此外,2039年編寫的軟體的架構將大不相同。現在,以不同方式提供數據的服務之間有著非常嚴格的界限。你可能有一個資料庫來處理關係查詢。今天,我們可以構建並不總是需要關係數據的應用程序,而是依賴已確立的NoSQL概念。不過,這僅在需要更高性能的情況下才執行,常常默認使用某個關係資料庫來提供持久性和豐富的數據訪問。如果你可以提供持久性內存以及對不同模型中的單個數據執行操作的方式,那麼針對傳統關係資料庫的需求將僅限於一些非常具體的用途。
數據存儲基本面隨硬體而變化
在過去的幾年,關係模型極其成功。你可以推理分析許多問題,並將它們放入到可以被操作和查詢的規範化表中。這一招很管用,但如果你有一個較簡單的問題要解決,比如說,通過主鍵獲取某一項,就得解決大部分同樣的複雜環節:查詢、表和模式等。NoSQL(更具體地說鍵/值存儲系統)使得這種方法看起來很可笑。
的確,考慮其他數據模型時,可以看到類似的模式。如果是時間序列數據,很簡單,只需要輕量級攝取和最小模式,但關係資料庫中的時間序列數據有負荷。圖形數據尤其不適合實現到關係模型的上面,會從功能上破壞任何類型的內表互操作性,無法實現圖形節點之間的臨時關係。
正是由於這個棘手的問題,NoSQL界眾多特殊用途的資料庫應運而生。各自以自己的方式提供很出色的訪問。然而這帶來了自身的問題。每種資料庫都必須由某人管理,擴展、監控和保護方面各自有著不同的特點。此外,這些資料庫無法以有意義的方式相互聯繫,因而給依賴這些系統的應用程序帶來了負擔。
隨著我們進入到未來,存儲數據這個基本概念將從鐵磁材料顆粒翻轉極性變成可直接定址的異常小的矽片層,可以快速操作和讀取。由於硬體在變化,我們使用硬體的方式也應該隨之變化。
由於資料庫接近DRAM的CPU可定址性,不過數據在掉電情況下保留下來,20年後我們的應用程序很顯然會將數據視作又近又快,更類似程序內部的變數而不是遠程資料庫內部的變數。
數據作為一種最方便和最高效的模型而進入,然後資料庫本身就能意識到該數據,以原子方式操縱該數據,並對該數據執行操作。數據改變了模型,可以替換原始樣式或與之共存。應用程序可以根據需要立即檢索新數據,而不是非得對單個關係模型執行巧妙的處理。再也不必擔心如何擴展專用資料庫,而是在最基本的層面操縱數據。不過,你仍然要解決傳統的問題:集群、協議優化和高可用性,但處理局部性和資料庫層內數據的可塑性消除了一大類問題。
2039年,我不知道我們是否會使用噴氣式背包。然而,我很確信我們不會以1999年所熟悉的方式來使用資料庫或編寫應用程序。


TAG:雲頭條 |