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