4

我有一列希望在(XML數據)中存儲大量文本數據。每行約8,000個字符,每分鐘約100-500行。SQL Server中的列級別壓縮

這麼多的數據意味着我將不得不相當積極地清除列。 (因爲我必須在我們公司的SAN上託管我的SQL Server,所以存儲空間非常昂貴。)但是,如果我能找到一種方法來壓縮這些數據,我可以保持更長時間。

我見過這樣的事情文章using CLR Integration to compress BLOBs在SQL 2005

我也看到了SQL Server 2005的

這兩個工具SQLCompress.NET似乎在說他們這樣做正是我想要的。壓縮單個列存儲時的數據。

但是,該工具已被放棄(自2008年以來沒有更新),我對CLR集成知之甚少,但我聽說它可能會導致問題。 另外,這兩種解決方案都適用於SQL Server 2005.

所以,這是我的問題。我正在使用SQL Server 2008 R2。這些SQL Server 2005解決方案中的任何一個對我而言都很好嗎?

或者有另一種解決方案可以用來壓縮我的數據嗎?

注:行壓縮和頁壓縮不會有我需要的東西(至少就我可以看到)行壓縮被存儲在可變長度字段和頁壓縮固定長度的數據有助於減少冗餘的情況下,數據。這些都不會幫助大塊文本。

注意二:我看到這個question,但它的答案使用行和頁面壓縮或FILESTREAMs。我不想使用FILESTREAM,因爲我無法鏡像我的數據庫。

+0

?一些C#應用程序? – 2012-01-27 18:41:59

+0

@ChrisShain - 我正在使用C#應用程序(IIS中託管的WCF/NServiceBus)來寫入它。我使用SSMS來閱讀它。 – Vaccano 2012-01-27 19:28:32

+1

考慮到目前的兩個答案,有人可能會評論說:「我對CLR集成知之甚少,但我聽說它可能會導致問題」?我最近使用CLR集成(我不承認太多瞭解),而且沒有任何問題。 – bfavaretto 2012-01-27 19:42:55

回答

0

我認爲使用最好的方法是在將數據放入SQL Server之前使用客戶端庫對數據進行壓縮和解壓縮,並且如果要通過XML的特定元素或屬性進行查詢,則可以提取並將它們存儲在單獨的列或規範化的行中(無論如何,您都要這麼做 - 查詢大型XML文本列,特別是嵌套元素,是slow)。

+0

我不需要在XML內部查詢,只需在SSMS查詢中獲取整個XML即可。 (就好像它是普通的文本數據。)我寧願不在客戶端壓縮,因爲那樣我就不能使用SSMS來查看數據。使用CLR集成的列級別壓縮是一個壞主意嗎?這是SQL Server的罕見領域? – Vaccano 2012-01-27 19:51:57

+0

何時與客戶端壓縮和解壓縮。不如SQL Server中的列壓縮,但我會拿我能得到的。 – Vaccano 2012-02-10 15:58:24

0

您可以嘗試使用filestream來存儲xml文檔並使用NTFS來壓縮它們。

見你在使用寫入數據(和讀取數據)SQL Server此artcle

Using Filestream in SQL2008

+1

唉,當您使用FileStream時,您無法鏡像數據庫。這是我的DBA需要的功能。否則,我可能會選擇這個解決方案。 – Vaccano 2012-02-10 15:57:19