【问题标题】:SQL Server 2008 - Storing FilesSQL Server 2008 - 存储文件
【发布时间】:2011-03-31 22:28:37
【问题描述】:

我正在针对 SQL Server 2008 数据库构建 MVC3 Web 应用程序。该网络应用程序将允许用户上传照片和文档。

当前文件存储在“图像”类型的列中。

这是一个可以做的事情,还是一种过时的方法?

将存储转移到另一种数据类型或开始使用 FILESTREAM 有什么好处吗?

统计数据 - 500(用户)x 7(每个平均文档)x 2MB(平均文档大小)

编辑 1

任何人都可以发表评论吗?我目前在做什么——存储为“图像”数据类型——不好?

【问题讨论】:

  • 是的,IMAGE 数据类型自 2005 年以来已被弃用 - 请改用 VARBINARY(MAX)。

标签: c# database image sql-server-2008 filestream


【解决方案1】:

您应该将图像存储在文件系统上。看到这个帖子:Storing Images in DB - Yea or Nay?

对于文档,它们只是用户上传/下载的静态文件,还是您会在文档中搜索内容?你需要对文件做一些特别的事情吗?

【讨论】:

  • +1,该链接值得一读以了解其优缺点
  • 我也会将文档存储在文件系统上。特别是如果它们是包含大量元数据的 Office 文档,那么您将耗尽昂贵的存储空间,而没有真正的专业人士。
  • 单独存储它们也意味着您必须单独备份它们,并且还引入了您的表可能会引用不存在的文件的可能性。
【解决方案2】:

(将我的 cmets 移动到答案)

来自MSDN:ntext、text 和 image 数据类型将在未来移除Microsoft SQL Server 的版本。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用 nvarchar(max)、varchar(max) 和 varbinary(max)。

如果您关心数据类型的计划报废,那就“不好”了。听起来varbinary(max) 甚至filestream 是未来首选的数据类型。

在数据库和文件系统中存储文件是一个单独的争论,其他人似乎都在讨论。

【讨论】:

    【解决方案3】:

    您可能想查看 SQL SERVER 2008 中的新 FILESTREAM 数据类型。阅读链接 - 它会为您提供一些指导来确定这是否是合适的存储类型。

    【讨论】:

      【解决方案4】:

      Microsoft Research 有一篇非常好的论文,名为 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 介绍,并尝试使用它!

      【讨论】:

        【解决方案5】:

        根据我的经验,最好将文件存储在磁盘上并在数据库中存储文件的路径。这让您的数据库可以专注于它应该做的事情,而不是文件存储。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-01-26
          • 1970-01-01
          • 2012-11-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多