【问题标题】:SQL Server: How to store binary data (e.g. Word file)?SQL Server:如何存储二进制数据(例如 Word 文件)?
【发布时间】:2010-12-15 13:32:57
【问题描述】:

我不是 DBA,所以我只是不知道使用各种方法在 SQL Server 中存储二进制数据的优缺点。

  • varbinary(n) 仅存储 8000 字节
  • varbinary(max) 存储 2 GB
  • BLOBs 适用于大文件,但会带来“管理”开销(文件仅在数据库中引用,但实际上位于本地硬盘上)

我基本上有大约 1000 个文档(每年),我想将它们存储在 SQL Server 2008 R2 数据库中(通过简单的 ASPX 表单上传填充,通过简单的 Gridview 下载查看)。所有文档可能在 2MB - 8MB 左右(Word、Excel 文件)。我的猜测是我应该使用具有以下布局的表格MyDocuments

MyDocuments 
    Data       varbinary(max)
    Title      varchar(255)
    ModifiedOn datetime()
    ModifiedBy varchar(100)

我是否与varbinary(max) 保持一致?还是我走错了方向(例如性能方面)?

【问题讨论】:

  • 最好将它们压缩,然后进行一次保存。
  • 不是一个选项,因为它们是在 GridView 中作为单个文档引用的单个文档。想想文档管理系统。
  • 那么在插入之前压缩每一个。 Excel 和 word 文件具有相当高的压缩率。这也将减少数据库大小。
  • 您对数据库大小的看法是正确的。对我实际上如何保存压缩文件的问题没有帮助。
  • 您可以使用“Sharpziplib”库。这些文件将保存为普通的非压缩文件。只需将原始文件名保存在一个额外的列中,以便它可以显示给用户。压缩/解压缩将在上传/下载之前完成。

标签: sql-server-2008 types binary-data


【解决方案1】:

SQL Server 2008 中有“FILESTREAM”存储。它允许结合使用 SQL Server 2008 和 NTFS 文件系统来存储和高效访问 BLOB 数据。

你可以看看这些:

FILESTREAM Storage in SQL Server 2008
Saving and Retrieving File Using FileStream SQL Server 2008

编辑:
小于 256K 的对象最好存储在数据库中,而大于 1M 的对象最好存储在文件系统中。

性能:Varbinary 与 FILESTREAM

http://www.sqlskills.com/BLOGS/PAUL/post/SQL-Server-2008-FILESTREAM-performance.aspx
To BLOB or Not To BLOB: Large Object Storage in a Database or a Filesystem
SQL Server 2008 FILESTREAM performance

【讨论】:

  • 我听说过FILESTREAM - 我为什么不用varbinary(max)
  • 如果文件小于 1mb,则使用 varbinary,否则使用 FILESTREAM。检查编辑。
  • @moontear: FILESTREAM 是VARBINARY(MAX) 上的附加属性 - 它不是单独的数据类型....
  • 700k 的文件怎么办
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
  • 2019-08-20
  • 1970-01-01
相关资源
最近更新 更多