2011年3月17日 星期四

SQL Server 2012(Code Name Denali) - 以列為主的新儲存方式(雲端儲存架構)

       以往SQL Server的資料庫在儲存資料時,是以叢集索引的方式排序並儲存在硬碟上,基本上都是以行的方式進行,然後取出時再透過Block的方式進行處理,但是在許多的資料表上,如果欄位的數量非常的多,取出時的效率都不是很好,而雲端運算(Cloud Computing)的興起,許多的雲端資料庫也粉粉的推出,如HBase、Cassandra、HyperTable等,而這些資料庫最大的差別就是在儲存方式上皆是以列為主的方式進行儲存(如下圖所示),而為了趕上這個潮流,所以微軟也在SQL Server 2011(Denali)的時候加入了這個新功能,



       經過測試,當使用的資料規模超過1TB,資料筆數為十四億四千萬時,微軟聲稱以列的方式儲存時,在查詢上CPU的時間上會有16倍的提升,而在使用時間上會有 455倍的提升。在真實情況下這意味著本來要耗費501秒的查詢,現在只需要1.1秒就可以完成了,而這項測試的環境為32個邏輯處理器和256GB記憶體的計算機上執行。

       微軟把每個列都隔離在自身的一組頁中,進而達到了這種驚人的改善。當執行查詢的時候,只會以磁碟載入位於列中的資料。而包含其他列的頁面則會被忽略,進而節省處理時間。這種方法相當於為每種我們所能想像到的列組合創建替代索引。然而,這種方式不會消耗大量的磁碟空間,它實際上會比傳統的資料表占用更小的空間。由於SQL Server的壓縮會發生在頁級別上,並且和行相比,列中的數據更容易重覆,所以使用列儲存索引的資料表將會有更高的壓縮等級。

        基本上還是先暫時不建議大家使用這列儲存的這個新功能,因為目前此功能屬於唯讀式且不可更新,一但建立了列儲存的索引功能時,那麼就不允許在表格上執行插入、更新或是刪除等操作了。微軟建議可以透過定期更新的方式來批次處理,然後再重新建立索引。但是這個操作非常的耗費資源,所以我們可以使用垂直分割來把操作限制到邏輯表的子集合的範圍內。

參考資料來源:
http://www.infoq.com/news/2011/03/Columnstore-index

備註:在推出Denali之前,微軟代號為Apollo的項目就已經將列存儲索引功能添加到PowerPivot之中,並嵌入了數據庫引擎之中。微軟提供的列存儲索引技術是基於一個叫做VertiPaq的數據庫架構的,它同傳統的索引相比能夠為數據庫提供較大程度上的性能提升。


其他相關網址:
  1. SQL Server 2012 Code Name(Denali) 新功能介紹與預覽
  2. SQL Server 2012(Code Name Denali) - 新T-SQL語法介紹 – 分頁功能
  3. SQL Server 2012(Code Name Denali) - 新T-SQL語法介紹 – Sequence
  4. SQL Server 2012(Code Name Denali) - 新T-SQL語法介紹 – Code Snippet Manager
  5. SQL Server 2012(Code Name Denali) - 以列為主的新儲存方式(雲端儲存架構)
  6. SQL Server 2012(Code Name Denali) - FileTable介紹
  7. 微軟介紹雲端平台就緒的資訊 - TechEd 2011
  8. SQL Server 2012 (Code Name Denali) - HA 新功能 - AlwaysOn
  9. SQL Server 2012 (Code Name Denali) - AlwaysOn 安裝與設定教學

沒有留言:

張貼留言