【问题标题】:Storing files in SQL Server在 SQL Server 中存储文件
【发布时间】:2019-12-23 16:38:54
【问题描述】:

这是我知道的一个老问题,但是使用 SQL Server 2012 是否最终可以将文件存储在数据库中,或者它们真的应该保存在文件系统中,只在数据库中引用它们?

如果现在认为将它们存储在数据库中是可以接受的,那么最有效的方法是什么?

我正计划应用加密,因此我很欣赏处理不会很快。

【问题讨论】:

  • 不确定我是否这样做。我只是想知道它现在是否是一个可行的选择。

标签: sql-server


【解决方案1】:

微软研究院有一篇非常好的论文,叫做To Blob or Not To Blob

他们经过大量的性能测试和分析后得出的结论是:

  • 如果您的图片或文档的大小通常低于 256K,则将它们存储在数据库的 VARBINARY 列中会更有效

  • 1234563 /p>
  • 在这两者之间,根据你的使用情况有点折腾

如果您决定将图片放入 SQL Server 表中,我强烈建议您使用单独的表来存储这些图片 - 不要将员工照片存储在员工表中 - 将它们保存在单独的表中。这样一来,Employee 表就可以保持精简、平均和非常高效,假设您并不总是需要选择员工照片作为查询的一部分。

对于文件组,请查看 Files and Filegroup Architecture 了解简介。基本上,您可以从一开始就为大型数据结构创建带有单独文件组的数据库,或者稍后添加一个额外的文件组。我们称之为“LARGE_DATA”。

现在,每当您要创建一个需要存储 VARCHAR(MAX) 或 VARBINARY(MAX) 列的新表时,您都可以为大数据指定此文件组:

 CREATE TABLE dbo.YourTable
     (....... define the fields here ......)
     ON Data                   -- the basic "Data" filegroup for the regular data
     TEXTIMAGE_ON LARGE_DATA   -- the filegroup for large chunks of data

查看有关文件组的 MSDN 介绍,并尝试使用它!

【讨论】:

  • 说得好。当然,这完全取决于用例,但文件流通常是一个不错的选择。
  • 您引用的研究文章是 2006 年 4 月的。从那以后肯定发生了很多变化。
  • @1576573987:不,不是真的——据我所知,这些结论仍然有效
  • 关于将VARBINARY(MAX) 存储在单独的文件组中,如果您有单独的“文件”表,您是将整个表存储在单独的文件组中还是将文件“元”数据存储在标准文件组并将VARBINARY(MAX) 存储在新文件组中?
  • @RemarkLima:您说的是 SQL Server 2012 中的FILETABLE 功能吗?在那里,只有关于文件的元数据存储在 SQL Server 中(如FILESTREAM) - 实际文件(组成它的字节)存储在数据库之外的磁盘驱动器上
【解决方案2】:

仍然没有简单的答案。这取决于你的场景。 MSDN has documentation to help you decide.

这里还介绍了其他选项。您可以使用 SQL Server 2012 中的 FileStream 或 File Table,而不是直接存储在文件系统中或存储在 BLOB 中。File Table 的优点似乎很简单(但我承认我没有亲身体验过它们) .)

这篇文章绝对值得一读。

【讨论】:

    【解决方案3】:

    您可以阅读FILESTREAM。以下是文档中的一些信息,可以帮助您做出决定:

    如果满足以下条件,则应考虑使用 FILESTREAM:

    • 正在存储的对象平均大于 1 MB。
    • 快速读取访问很重要。
    • 您正在开发将中间层用于应用程序逻辑的应用程序。

    对于较小的对象,将 varbinary(max) BLOB 存储在数据库中通常可以提供更好的流式传输性能。

    【讨论】:

    • 实际上我可以两者都做,具体取决于文件大小。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    相关资源
    最近更新 更多