【发布时间】:2012-01-27 18:21:14
【问题描述】:
我有一个列,我想在(XML 数据)中存储大量文本数据。每行大约 8,000 个字符,每分钟大约 100-500 行。
这么多数据意味着我将不得不相当积极地清除该列。 (由于我必须在我们公司的 SAN 上托管我的 SQL Server,存储空间非常昂贵。)但如果我能找到一种方法来压缩这些数据,我可以将其保存更长时间。 p>
我在 SQL 2005 的 using CLR Integration to compress BLOBs 上看到过类似这篇文章的内容。
我还看到了用于 SQL Server 2005 的工具 SQLCompress.NET。
两者似乎都说他们完全按照我的意愿行事。在存储时压缩单个列的数据。
但是,该工具已被废弃(自 2008 年以来没有更新),我对 CLR 集成知之甚少,除了听说它会导致问题。 此外,这两种解决方案都适用于 SQL Server 2005。
所以,这是我的问题。我正在使用 SQL Server 2008 R2。这些 SQL Server 2005 解决方案中的任何一个都适合我吗?
或者我可以使用其他解决方案来压缩我的数据吗?
注意:行压缩和页面压缩对我需要的东西没有帮助(至少据我所知。)行压缩将固定长度的数据存储在可变长度字段中,页面压缩减少了冗余数据的实例。这些都对大文本块没有帮助。
注意二:我看到了这个question,但它的答案使用了行和页面压缩或文件流。我不想使用 FILESTREAM,因为我失去了镜像数据库的能力。
【问题讨论】:
-
您使用什么将数据写入(和读取)SQL Server?一些 C# 应用程序?
-
我无法真正回答您的问题,但始终有效的替代方法是让客户端应用程序压缩数据。您将存储一个 varbinary(max) blob。您可以使用任何您想要的压缩库,包括强大的压缩库,例如 7-zip (LZMA SDK)。我猜这些在 SQL Server 中不起作用。
-
@ChrisShain - 我正在使用 C# 应用程序(IIS 中托管的 WCF/NServiceBus)对其进行写入。我使用 SSMS 读取它。
-
我已经想到了。但后来我无法使用 SSMS 查询数据。我总是需要一个自定义应用程序来查看数据。尽管如此,这还是可行的,如果我找不到更好的方法,我最终可能会这样做。
-
考虑到当前的两个答案,有人可以评论“我对 CLR 集成了解不多,除非我听说它会导致问题”?我最近自己使用了 CLR 集成(我承认对它了解不多),没有任何问题。
标签: .net sql-server sql-server-2008 sql-server-2008-r2 data-compression