在 SQL Server 中存储文件 [英] Storing files in SQL Server

查看:52
本文介绍了在 SQL Server 中存储文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

It's an old question I know, but with SQL Server 2012 is it finally ok to store files in the database, or should they really be kept in the filesystem with only references to them in the database?

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

If storing them in the database is considered acceptable these days, what is the most effective way to do it?

我打算应用加密,所以我很欣赏处理速度不会像闪电一样快.

I'm planning to apply encryption so I appreciate processing will not be lightning fast.

推荐答案

Microsoft Research 有一篇非常好的论文,名为 到 Blob 或不 Blob.

There's a really good paper by Microsoft Research called To Blob or Not To Blob.

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

Their conclusion after a large number of performance tests and analysis is this:

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

  • if your pictures or document are typically below 256K in size, storing them in a database VARBINARY column is more efficient

如果您的图片或文档的大小通常超过 1 MB,则将它们存储在文件系统中会更有效(并且使用 SQL Server 2008 的 FILESTREAM 属性,它们仍处于事务控制之下并且是数据库的一部分)

if your pictures or document are typically over 1 MB in size, storing them in the filesystem is more efficient (and with SQL Server 2008's FILESTREAM attribute, they're still under transactional control and part of the database)

在这两者之间,根据您的使用情况,有点折腾

in between those two, it's a bit of a toss-up depending on your use

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

If you decide to put your pictures into a SQL Server table, I would strongly recommend using a separate table for storing those pictures - do not store the employee photo in the employee table - keep them in a separate table. That way, the Employee table can stay lean and mean and very efficient, assuming you don't always need to select the employee photo, too, as part of your queries.

对于文件组,请查看文件和文件组架构以了解介绍.基本上,您可以从一开始就为大型数据结构创建具有单独文件组的数据库,或者稍后添加其他文件组.我们称之为LARGE_DATA".

For filegroups, check out Files and Filegroup Architecture for an intro. Basically, you would either create your database with a separate filegroup for large data structures right from the beginning, or add an additional filegroup later. Let's call it "LARGE_DATA".

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

Now, whenever you have a new table to create which needs to store VARCHAR(MAX) or VARBINARY(MAX) columns, you can specify this file group for the large data:

 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 介绍,并尝试使用它!

Check out the MSDN intro on filegroups, and play around with it!

这篇关于在 SQL Server 中存储文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆