gpt4 book ai didi

SQL Server FileStream详解

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章SQL Server FileStream详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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语句对其进行插入、更新、查询、搜索和备份.

1、FileStream配置 。

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

SQL Server FileStream详解

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

SQL Server FileStream详解

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

SQL Server FileStream详解

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

?
1
2
Exec sp_configure filesteam_access_level, 2
RECONFIGURE

  最后重启SQL Server Service 。

SQL Server FileStream详解

2、实例展示 。

  创建FileStream类型文件/组 。

SQL Server FileStream详解

?
1
2
3
4
5
6
7
8
--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:\Company\Data\SQL Server\FileStream' ) TO FILEGROUP [FileStreamGroup]
GO

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

?
1
2
3
4
5
6
7
8
9
--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]

  插入一些测试数据 。

?
1
2
3
4
5
--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 )))

  从前台插入一些数据 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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:\Folder\131 u_ex151207.log" );
     cmd.Parameters. Add (param);
     cmd.ExecuteNonQuery();
   }
   conn. Close ();
}

  检索数据  。

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

结果 。

SQL Server FileStream详解

  文件系统 。

SQL Server FileStream详解

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

3、注意事项 。

  请注意以下事项:

 •并不是所有的文件存储都适合使用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 FileStream详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com