人們總是被各種術語所迷惑。當我第一次看到關于SQL Server內存數據庫的相關報道時,我和其他人一樣都理解錯了。我認為它只不過是運行在大量RAM上的SQL Server實例罷了。但是這個名為Hekaton項目的SQL Server內存數據庫仿佛包含了更多的內容,它將出現在下一版本的數據庫平臺當中。現在的問題是,它將如何與你之前的SQL Server安裝實現完美的集成?
首先最基礎的,微軟官方給出的內存數據庫定義是非常準確的:在內存數據庫系統中,包括數據庫引擎和盡可能多的數據都將直接存儲在RAM中。當然,這對于提高交易處理速度是非常有幫助的,但需要有兩個前提:1、數據庫和引擎都要盡可能的小;2、系統中的RAM要盡可能的大。以便數據庫、引擎與RAM相互適應。
隨著內存硬件的成本在不斷下降,越來越多的服務器都不斷增加內存配置,因此上述的兩個條件中,后者在實現起來顯然要比前者更加容易。而對于SQL Server來說則更是如此。
除了內存設備的成本降低之外,CPU的處理速度以及并行化也在不斷加深。因此,目前主流的數據庫產品都在這些方面上做文章,為了提升CPU的利用率,它們會盡可能地將數據庫操作更加向CPU靠攏。
在此之前,SAP、Oracle都在做此類嘗試,并取得了不錯的反饋。所以SQL Server也在積極地對這一技術進行深入研發。在微軟TechNet博客上面的一篇文章中,作者David Campbell探討了內存數據庫技術的發展趨勢,并指出數據存儲模式將由傳統的行式逐漸轉化為列式存儲。
事實上,微軟在Excel的PowerPivot插件上就已經使用到了列式存儲技術。Campbell介紹說:“在SQL Server 2012中,我們還添加了xVelocity內存分析引擎,它是作為SQL Server分析服務(SSAS)的一部分來交付給用戶。”從長遠角度來看,xVelocity組件將逐漸獨立出來,也許在下一版本的SQL Server內存數據庫中,我們就能看到它成為一個高度垂直化的解決方案,專門應對數據倉庫或者數據分析等工作負載。
這也就引出我之前所提到的一個問題:要想真正利用好內存處理技術,我們之前的SQL Server安裝是否需要進行升級或者改造?這很有可能,但是也是要視情況而定,以下是在使用內存數據庫時我們所需要注意的三個問題:
1、內存數據庫解決方案需要我們對現有數據庫進行部分改造
基于列式存儲的內存數據庫在進行設置的時候依然需要進行一定的變更。在微軟發布的一個案例中分享了SQL Server 2012中現有的一些內存功能,其中就提到當需要進行數據庫變更的時候,更改元數據值就可以了。所以根據你的設置,可能所需的工作會很少,但并不代表沒有。
2、數據庫越大,性能提升越多,但費用也越高
那些面向分析和數據倉庫的工作負載是最適合內存數據庫的(假設所有處理都在內存中進行),你將能看到最大限度的性能提升。列式結構的內存數據庫并不是針對交易型負載進行的優化,也就是傳統的CRUD(create, read, update, delete)操作。也許未來內存技術將逐漸擴展到交易系統領域,但這不是一朝一夕的事。
3、因此,我們并不需要把所有東西都轉移到內存數據庫上
我們可以先從那些處理器密集型的工作負載入手,如數據分析。數據分析系統在內存數據庫的清單中應該出在最高的優先級之上。即使你還沒有特別計劃要遷移到其他版本的SQL Server,記住這一點也會幫助你更好地在未來完成SQL Server系統的遷移。