標籤:style blog http color io 使用 ar java for
解剖SQLSERVER 第十二篇 OrcaMDF 行壓縮支援(譯)
http://improve.dk/orcamdf-row-compression-support/
在這兩個月的斷斷續續的開發工作中,我終於將OrcaMDF 壓縮功能分支合并到主分支
這意味著OrcaMDF 現在正式支援資料行壓縮功能
支援的資料類型
實現行壓縮需要我修改幾乎所有已實現的資料類型以將他們作為壓縮儲存。integer類型被壓縮了,decimal類型
變成可變長度,而可變長度類型基本上都被截斷了進而用0來填補。所有先前OrcaMDF已經實現的資料類型都支援行壓縮,並且在先前已經支援的資料類型的基礎上又添加了一些新支援的資料類型
當前的資料類型支援列表如下:
bigintbinarybitchardatedatetimemal/numeric (including vardecimal, both with and without row compression)imageintmoneyncharntextnvarcharsmallintsmallmoneytexttimeuniqueidentifiervarbinaryvarchar
Unicode壓縮
Nchar和nvarchar被證明是比其他類型還要棘手,因為他們使用SCSU unicode壓縮格式。
我發現了在.NET裡有一個對SCSU的實現,但是當我將他的代碼嵌入到OrcaMDF裡面他彈出了一個license 視窗
需要我購買license。
另外 有很多開源的java工具實現但是都不是我想要的。我選擇自己實現SCSU 解壓縮根據Unicode.Inc給出的參考實現。
我只實現解壓縮並最終完成了一個非常苗條和簡單的SCSU解壓縮器。
我將會單獨寫一篇部落格來介紹decompressor 並且從OrcaMDF裡獨立出來作為一個單獨的類並帶有一些預設值
體繫結構更改
我想我應該可以在一到兩周時間內完成解壓縮功能,畢竟,解壓縮有很好的文檔記錄。我需要想一下
為了實現壓縮需要改多少東西。行記錄解析器必需要知道頁面是否被壓縮。但是行記錄解析器從哪裡可以知道
頁面被壓縮過的?先前獲得的都是頁面指標,現在我必須查詢中繼資料(partition表)確保所有的資料傳遞路徑是從DataScanner 傳到page parser再傳到 record parser最後到data type parsers
我不得不在規則解析器上實現多種抽象以對壓縮的記錄和非壓縮的記錄進行抽象。
整體而言,這會是一個更好的體繫結構,但是可能比預期需要多花更多時間。事實上解析被壓縮的資料格式只是磨難的一小部分 --因為有文檔而且格式比較簡單。然後資料類型 在我把他們研究出來為止需要更多的工作量
預覽
像往常一樣,代碼放在Github上,你可以下載下來進行研究!如果你不是程式員,我也上傳了可執行檔OrcaMDF Studio二進位檔案(日期為2012-02-06)
統計資料
作為一個數字情人,我喜歡看統計資料。這裡有一組資料是對OrcaMDF的隨機統計:
123提交 第一個在2011年4月15日——這幾乎是一年前!
11700行 C#代碼(不含空格)。
1000行注釋。
35%的代碼是用於測試的,使用測試套件包含超過200個測試。
Ohloh估計OrcaMDF開發成本為144090美元
第十二篇完
解剖SQLSERVER 第十二篇 OrcaMDF 行壓縮支援(譯)