代码之家  ›  专栏  ›  技术社区  ›  Ilya Gazman

在将blob保存到sql时应该压缩文件吗?

  •  2
  • Ilya Gazman  · 技术社区  · 6 年前

    我有一个JSON文件,我想将其另存为一个blob到Microsoft SQL Server。

    压缩的优点是节省空间,缺点是容易丢失的可读性。

    我想知道T-SQL是否有任何优化,在优化中它自己压缩blob。我知道柱状数据库是这样工作的,比如Vertica或Postgres。

    1 回复  |  直到 6 年前
        1
  •  2
  •   sniperd Ali Ahmed    6 年前

    如果我想通过它们进行搜索,我个人不会压缩它们。我不相信它会自己压扁一个斑点。我知道一个事实,甚至非常大 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) 作为我的数据类型。任何时候我尝试使用 TEXT , IMAGE 等等,如果我试图做一个棘手的查询,我稍后会遇到某种SQL错误。我相信微软正在尝试使用 varchar(最大) 替换 blob 数据类型的类型,正在缓慢地取消对它们的预测。