手机
当前位置:查字典教程网 >编程开发 >mssql数据库 >SQL Server FileStream详解
SQL Server FileStream详解
摘要:FILESTREAM是SQLServer2008中的一个新特性,允许以独立文件的形式存放大对象数据,而不是以往一样将所有数据都保存到数据文件...

FILESTREAM是SQL Server 2008中的一个新特性,允许以独立文件的形式存放大对象数据,而不是以往一样将所有数据都保存到数据文件中。以往在对业务系统的文件进行管理时有两种方法,一种是将文件保存到服务器文件系统中,数据库中只保存了该文件的路径,在使用该文件时应用程序连接到服务器读取文件;另一种是将文件以varbinary(max)或image数据类型保存到SQL Server中。而SQL Server 2008提供了FILESTREAM,结合这两种方式的优点。

FILESTREAM使SQL Server数据库引擎和NTFS文件系统成为了一个整体。Transact-SQL语句可以插入、更新、查询、搜索和备份FILESTREAM数据。FILESTREAM使用NT系统缓存来缓存文件数据。这有助于减少FILESTREAM数据可能对数据库引擎性能产生的任何影响。由于没有使用SQL Server缓冲池,因此该内存可用于查询处理。

以往我们对文件管理有两种方法:

1.数据库只保存文件的路径,具体的文件保存在文件服务器(NFS)上,使用时,编程实现从文件服务器读取文件;

2.将文件直接以varbinary(max)或image数据类型保存在数据库中。

上面两种文件存放方式都有问题:第一种方法因为会访问磁盘,故受I/O影响性能不是很好,而且不能很好的进行文件备份;第二种方法虽然解决了文件备份(数据库的备份)问题,但是由于字段的字节数太大,对数据库本身也会造成影响,性能也很低下。

微软在SQL Server 2008推出了一种新的方式 - FileStream,它不是一种新的数据类型,而是一种技术,它使SQL Server数据库引擎和NTFS文件系统成为了一个整体,它结合了上面两种方式的优点:FileStream使用NT系统来缓存文件数据,而对文件数据的操作可使用Transact-SQL语句对其进行插入、更新、查询、搜索和备份。

一、FileStream配置

1.配置SQL Server安装实例:Start -> All Programs -> Microsoft SQL Server 2008 R2 -> Configuration Tools -> SQL Server Configuration Manager

SQL Server FileStream详解1

右击属性,切换到FILESTREAM标签,勾选如下配置

SQL Server FileStream详解2

2. 打开SQL Server,并配置如下

SQL Server FileStream详解3

以上也可以通过如下脚本执行:

Exec sp_configure filesteam_access_level, 2 RECONFIGURE

最后重启SQL Server Service

SQL Server FileStream详解4

二、实例展示

创建FileStream类型文件/组

SQL Server FileStream详解5

--Create filestreamgroup ALTER DATABASE [Archive] ADD FILEGROUP [FileStreamGroup] CONTAINS FILESTREAM GO --Create filestream and association with filestreamgroup above ALTER DATABASE [Archive] ADD FILE ( NAME = N'FileStream', FILENAME = N'D:CompanyDataSQL ServerFileStream') TO FILEGROUP [FileStreamGroup] GO

创建测试表(注意:如果表包含FILESTREAM列,则每一行都必须具有唯一的行ID)

--Create table CREATE TABLE Archive.dbo.Attachment ( [ID] [UNIQUEIDENTIFIER] ROWGUIDCOL NOT NULL PRIMARY KEY, [FileName] NVARCHAR(100) NULL, [CreateUser] NVARCHAR(100) NULL, [CreateDatetime] DATETIME NULL, [Content] VARBINARY(MAX) FILESTREAM NULL ) FILESTREAM_ON [FileStreamGroup]

插入一些测试数据

--Insert some records INSERT INTO Attachment VALUES (NEWID(),'File Name 1','shg.cpan', GETDATE(),NULL), (NEWID(),'File Name 1','shg.cpan', GETDATE(),CAST('' AS VARBINARY(MAX))), (NEWID(),'File Name 1','shg.cpan', GETDATE(),CAST('This is a attachment, which contains all introduction for filestream' AS VARBINARY(MAX)))

从前台插入一些数据

using (SqlConnection conn = new SqlConnection("server=10.7.15.172;database=Archive;uid=sa;pwd=1234;Connect Timeout=180")) { conn.Open(); using (SqlCommand cmd = conn.CreateCommand()) { string id = Guid.NewGuid().ToString(); cmd.CommandText = "INSERT INTO Attachment VALUES('" + id + "','File Name 2','shg.cpan','" + DateTime.Now + "',@content)"; SqlParameter param = new SqlParameter("@content", SqlDbType.VarBinary, 1000000000); param.Value = File.ReadAllBytes(@"D:Folder131 u_ex151207.log"); cmd.Parameters.Add(param); cmd.ExecuteNonQuery(); } conn.Close(); }

检索数据

SELECT DATALENGTH(CONTENT)/(1024.0 * 1024.0) AS MB,* FROM ATTACHMENT

结果

SQL Server FileStream详解6

文件系统

SQL Server FileStream详解7

上面的文件都是上传的真实文件,只不过没有后缀,如果重命名加上后缀,即可读取,如最后一个是excel文件,加上.xls,即可用Excel软件打开此文件

三、注意事项

请注意以下事项:

•并不是所有的文件存储都适合使用FileStream,如果所存储的文件对象平均大于1MB考虑使用FileStream,否则对于较小的文件对象,以varbinary(max)BLOB存储在数据库中通常会提供更为优异的流性能;

•FileStream可以使用在故障集群上(Failover Cluster),但此时FileStream文件组必须位于共享磁盘资源上;

•FILESTREAM 与其他 SQL Server 功能的兼容性:https://msdn.microsoft.com/zh-cn/library/bb895334(v=sql.105).aspx

【SQL Server FileStream详解】相关文章:

SQL Server 在Management Studio中使用Web浏览器

SQL Server 版本变更检查 警告

SQL Server 临时表的删除

SQL Server数据库的修复SQL语句

SQL Server 2008 R2 超详细安装图文教程

SQL Server 解析行溢出数据的存储

SQL Server 2008网络协议深入理解

SQL Server 数据库优化

SQL Server 2005 数据库复制详细介绍

SQLServer 管理常用SQL语句

精品推荐
分类导航