将Blob保存到SQL时是否应该压缩文件?

时间:2018-07-20 15:48:07

标签: json sql-server tsql zip

我有要保存为Microsoft SQL Server的JSON文件。

拉链的优点是节省空间,缺点是可读性会丢失。

我想知道T-SQL是否有任何优化来自行压缩Blob。我知道列式数据库以这种方式工作,例如Vertica或Postgres。

1 个答案:

答案 0 :(得分:2)

如果我希望能够被它们搜索,我个人不会压缩它们。我不认为它会自行压缩Blob。我知道,即使是非常大的VARCHAR列也不会自行压缩,因此我不希望Blob会压缩。但是,您可以打开内置的压缩​​功能:

https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/12/08/built-in-functions-for-compressiondecompression-in-sql-server-2016/

https://docs.microsoft.com/en-us/sql/relational-databases/data-compression/enable-compression-on-a-table-or-index?view=sql-server-2017

它有一些优点,但是通常以CPU为代价。因此,如果您是我,可能不会压缩文件以放入SQL中,但可能会压缩存储的表。这完全取决于数据是什么,json压缩后可能会获得很多空间,但是.jpeg不会。

我过去做过的一个选择是简单地将文件存储在某个位置的内容服务器上,并在SQL中存储有关文件的元数据(名称,标签,我存储文件的补丁程序,文件扩展名等)。 )这样,我的数据很容易到达/放入那里,而我仅使用SQL进行查找。另外,它允许我在大型文本文件时也使用Lucene中的solr索引来提供全文搜索解决方案,因为数据没有填充到SQL表中。只是一个主意! :)

再想一想,如果我要将大型json文件存储到SQL中,我可能会选择VARCHAR(MAX)NVARCHAR(MAX)作为我的数据类型。每当我尝试使用TEXTIMAGE等时,如果尝试执行棘手的查询,稍后都会遇到某种SQL错误。我相信Microsoft会尝试使用VARCHAR(MAX)来替换blob类型的数据类型,并正在逐步弃用它们。