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缓冲池,因此该内存可用于查询处理。

  在SQL Server中,BLOB可以是将数据存储在表中的标准varbinary(max)数据,也可以是将数据存储在文件系统中的FILESTREAM varbinary(max)对象。数据的大小和应用情况决定您应该使用数据库存储还是文件系统存储。如果满足以下条件,则应考虑使用FILESTREAM:

  所存储的对象平均大于1MB。

  快速读取访问很重要。

  您开发的是使用中间层作为应用程序逻辑的应用程序。

  对于较小的对象,将varbinary(max)BLOB存储在数据库中通常会提供更为优异的流性能。

  FILESTREAM存储以varbinary(max)列的形式实现,在该列中数据以BLOB的形式存储在文件系统中。BLOB的大小仅受文件系统容量大小的限制。文件大小为2GB的varbinary(max)标准限制不适用于存储在文件系统中的BLOB。

  若要将指定列使用FILESTREAM存储在文件系统中,对varbinary(max)列指定FILESTREAM属性。这样数据库引擎会将该列的所有数据存储在文件系统,而不是数据库文件中。

  FILESTREAM数据必须存储在FILESTREAM文件组中。FILESTREAM文件组是包含文件系统目录而非文件本身的专用文件组。这些文件系统目录称为“数据容器”。数据容器是数据库引擎存储与文件系统存储之间的接口。

  使用FILESTREAM存储时,需要注意以下内容:

  如果表包含FILESTREAM列,则每一行都必须具有唯一的行ID。

  不能嵌套FILESTREAM数据容器。

  使用故障转移群集时,FILESTREAM文件组必须位于共享磁盘资源上。

  FILESTREAM文件组可位于压缩卷上。

  使用FILESTREAM

  在开始使用FILESTREAM之前,必须在SQL Server数据库引擎实例中启用FILESTREAM。具体启用数据库实例FILESTREAM的操作如下:

  (1)在SQL Server配置管理器中打开SQL Server数据库引擎的属性窗口,切换到FILESTREAM选项卡,如图所示。

  

  (2)选中“针对Transact-SQL访问启用FILESTREAM”复选框,其他的选项是针对Windows进行读写的,可以都选中,然后单击“确定”按钮保存对FILESTREAM的设置。

  (3)打开SSMS连接到数据库实例,右击数据库实例,选择“属性”选项,系统将打开SQL Server实例的属性窗口。

  (4)切换的“高级”选项页,在文件流访问级别下拉列表框中选择“已启用完全访问”选项,如图所示。

  

  (5)单击“确定”按钮,然后重启数据库实例,FILESTREAM在数据库实例中设置完成。

  在启用了数据库实例的FILESTREAM后,接下来就需要设置数据库的FILESTREAM和创建具有FILESTREAM数据列的表:

  (6)对应新建的数据库,则在创建数据库时创建FILESTREAM文件组,如果是现有数据库,则使用ALTER DATABASE添加FILESTREAM的文件组,例如对TestDB1数据库添加FILESTREAM的文件组,具体SQL脚本如代码:

  ALTER DATABASE [TestDB1]

  ADD FILEGROUP [FileStreamGroup] CONTAINS FILESTREAM --添加FILESTREAM文件组

  GO

  ALTER DATABASE [TestDB1]

  ADD FILE ( NAME = N'FileStream', FILENAME = N'C:FileStream) --添加FILESTREAM文件

  TO FILEGROUP [FileStreamGroup]

  GO

  系统将自动创建C:FileStream文件夹并在其中写入filestream.hdr文件,该文件是 FILESTREAM容器的头文件不能删除,一定要确保在运行该语句之前C:FileStream并不存在。

  (7)创建了FILESTREAM文件组后便可创建和修改表,指定某varbinary(max)类型的列包含FILESTREAM数据。例如创建Files表,该表包含FileID和FIleContent列,具体脚本如代码:

  CREATE TABLE Files

  (

  FileID UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE,

  ID INT UNIQUE,

  FileContent VARBINARY(MAX) FILESTREAM NULL --FILESTREAM类型的二进制

  )

  管理与使用FILESTREAM

  在创建好FILESTREAM表后即可向其中添加、修改和读取数据。SQL Server支持使用T-SQL和WIN32 API两种方式访问FILESTREAM。

  对于T-SQL访问FILESTREAM数据列来说,FILESTREAM是完全透明的,也就是说,T-SQL仍然使用一般的访问varbinary(max)数据列的方式访问,并不会因为是FILESTREAM列而有所不同。

  例如向Files表中插入数据、修改表数据和删除数据的SQL脚本如代码:

  INSERT INTO Files --插入测试数据

  VALUES (newid (),1, CAST('TestFileStream1' as varbinary(max)));

  GO

  UPDATE Files --更新测试数据

  SET FileContent=CAST('TestFileStream2' as varbinary(max))

  WHERE ID=1

  GO

  DELETE FROM Files --删除测试数据

  WHERE ID=1

  无论是插入数据还是修改数据,SQL Server都将在文件系统中创建新的文件来保存最新的修改文件内容,修改或删除数据后文件系统中的文件将保留,而不会被同时删除。

  使用FILESTREAM来存储二进制大型对象(BLOB)数据时,可使用Win32 API来处理文件。为了支持在Win32应用程序中处理FILESTREAMBLOB数据。所有FILESTREAM数据容器访问都是在SQL Server事务中执行的。可在同一事务中执行T-SQL语句以保持SQL数据和FILESTREAM数据之间的一致性。

转载于:https://www.cnblogs.com/zhangtao/articles/2022061.html

QL Server 2008新特性:FILESTREAM相关推荐

  1. 一. SQL Server 2008 新特性概述

    前几天一直再学习ASP.NET MVC框架.这几天在研究EMC存储和F5交换机都是奢侈品啊,虽然在工作中大多是ORCLE,看到SQL SERVER 2K8有许多新特性决定学习学习,增加自己的市场竞争力 ...

  2. sql server 2008新特性:资源调控器

    sql server 2008新特性:资源调控器 来源:csdn:http://blog.csdn.net/xiaoxu0123/archive/2011/02/10/6177265.aspx 资源调 ...

  3. SQL Server 2008新特性之压缩备份(backup compression)

    背景 当我们升级.迁移或者重建数据库时,你是否为将一个大数据库文件(动不动上100GB)的传输而烦劳呢?当你在配置数据库镜像的时候,你是否也曾因为超大备份文件的移动而抓耳挠腮呢?当你需要跨地域传输数据 ...

  4. 译:SQL Server 2008 新特性(3/3)

    注:冉冉毅马译(原文),英文内容来源于微软网站. SQL Server 2008 新特性 (3/3) 3.智能 SQL Server 2008提供一个能满足你用户智能化需求的综合平台. 3.1.集成任 ...

  5. SQL Server 2008新特性——SSMS增强

    SQL Server 2008已经发布很多天了,今天来总结一下我们最常用的工具SSMS在SQL 2008中的一些改进: 1.在注册的服务器组中一次SQL查询可以针对多个服务器执行. 首先是要在&quo ...

  6. SQL Server 2016新特性:列存储索引新特性

    SQL Server 2016新特性:列存储索引新特性 行存储表可以有一个可更新的列存储索引,之前非聚集的列存储索引是只读的. 非聚集的列存储索引支持筛选条件. 在内存优化表中可以有一个列存储索引,可 ...

  7. SQL Server 2019 新特性之 SQL Server大数据群集 介绍(一)

    SQL Server 2019 新特性之 SQL Server大数据群集 介绍(一) 从开始SQL Server 2019 预览,SQL Server 大数据群集允许你部署的 Kubernetes 上 ...

  8. 云世界,一切如梦幻,数据也玩虚拟化。 SQL Server 2019 新特性系列一:数据虚拟化

    SQL Server 2019 新特性系列一:数据虚拟化 最新更新 SQL Server已经到了CTP2.2版本,主要更新了如下功能: 大数据集群:在大数据群集上使用 azure 数据工作室中的 sp ...

  9. 新年新气象,从SQL Server 2019新特性开始!

    SQL Server 2019新特性开篇概述 2019年了,新年伊始,SQL Server 2019已经到CTP 2.1 ,一直没有认真的学习SQL Server 2019 ,既然是新年新气象,就从新 ...

  10. [SQL Server 2014] SQL Server 2014新特性探秘

    SQL Server 2014新特性探秘(1)-内存数据库 简介 SQL Server 2014提供了众多激动人心的新功能,但其中我想最让人期待的特性之一就要算内存数据库了.去年我再西雅图参加SQL ...

最新文章

  1. c语言20字节的内存的数据怎么读取_C++编程-内存对齐
  2. mysql自定义序号_MySQL数据库之在mysql中给查询的结果添加序号列
  3. 多线程、方便扩展的Windows服务程序
  4. 关于自动装箱和自动拆箱
  5. 无人车是怎样一步步学会开车的? | 自动驾驶科普
  6. java文件编译后,出现xx$1.class的原因
  7. node2vec之小黑尝试
  8. 微信客服crm系统多客服聊天源码分享
  9. Exadata一体机故障回顾
  10. x265中Encoder::encode流程
  11. 请不要叫我小编,我是神圣的内容产品经理
  12. SD-WAN的驱动者:云计算
  13. 5月Github上最热门的数据科学和机器学习项目TOP5
  14. 甲骨文最新改邮箱、改账户名、改密码教程
  15. SEO之网站标题间隔符
  16. 多可知识管理系统三大特色
  17. 欧姆定理验证,电阻的电压/电流/功率,电阻串联,电阻并联,电阻分压
  18. 动态设置html样式或style具体属性
  19. 古月居ROS入门21讲学习笔记P9
  20. 【docker】dbclient远程访问非本机数据库(mysql,oracle,postgres,sqlserver/mssql),测试远程数据库连通性

热门文章

  1. python 保存视频流_[宜配屋]听图阁
  2. python字符串转换为数字_Python不使用int()函数把字符串转换为数字的方法
  3. mysql 分页 pageindex_mysql 超1亿数据,优化分页查询
  4. L1-048 矩阵A乘以B (15 分)—团体程序设计天梯赛
  5. Android开发过程为C文件或者C++文件配置打印Logcat信息
  6. windows Hadoop环境搭建之一---软件准备
  7. HBase 实战(1)--HBase的数据导入方式
  8. 五分钟搭建 Flash 视频直播站
  9. ListIterator和Iterator的区别
  10. typora字体颜色及字体背景颜色快捷方式(亲测实用有效)