`
cjc
  • 浏览: 683361 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SQL Server 2008新特性——FILESTREAM

阅读更多
<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>

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选项卡,如图所示。

clip_image002

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

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

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

clip_image004

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

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

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

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->ALTERDATABASE[TestDB1]
ADDFILEGROUP[FileStreamGroup]CONTAINSFILESTREAM--添加FILESTREAM文件组
GO

ALTERDATABASE[TestDB1]
ADDFILE(NAME=N'FileStream',FILENAME=N'C:\FileStream)--添加FILESTREAM文件
TOFILEGROUP[FileStreamGroup]
GO

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

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

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->CREATETABLEFiles
(
FileID
UNIQUEIDENTIFIERROWGUIDCOLNOTNULLUNIQUE,
ID
INTUNIQUE,
FileContent
VARBINARY(MAX)FILESTREAMNULL--FILESTREAM类型的二进制
)
管理与使用FILESTREAM

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

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

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

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->INSERTINTOFiles--插入测试数据
VALUES(newid(),1,CAST('TestFileStream1'asvarbinary(max)));
GO

UPDATEFiles--更新测试数据
SETFileContent=CAST('TestFileStream2'asvarbinary(max))
WHEREID=1
GO

DELETEFROMFiles--删除测试数据
WHEREID=1

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

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

分享到:
评论

相关推荐

    SQL Server 2008开发新特性系列课程(10):超越关系型数据-SQL Server 2008的非关系型数据支持能力

    **SQL Server 2008 开发新特性系列课程(10):超越关系型数据——SQL Server 2008的非关系型数据支持能力** 在SQL Server 2008中,微软引入了一系列的新特性,以拓宽数据库系统的功能边界,其中一项重要的更新就是对...

    SQL Server 2008中的新数据类型——新的三维数据类型和日期类型可以实现更多功能.pdf

    SQL Server 2008 引入了新的数据类型,这些数据类型扩展了数据库的存储能力,允许存储和处理更复杂的数据结构。在这些新数据类型中,比较引人注目的是三维数据类型和新的日期类型,这些类型在特定应用场景中提供了...

    teched 2008 微软技术大会之 SQL server 2008

    在“teched 2008 微软技术大会之 SQL server 2008”这一主题中,我们聚焦的是微软在2008年推出的重要数据库管理系统——SQL Server 2008的诸多新特性。这个压缩包可能包含了一系列的技术讲座、演示文稿、示例代码和...

    SQL Server 2008,大家准备好了吗?——与微软副总裁Ted Kummert就新版本发布及微软远景的讨论.pdf

    SQL Server 2008是微软公司在2008年推出的数据库管理系统,作为SQL Server 2005的后续版本,它在数据处理和数据库管理方面提供了诸多新的特性和改进。微软副总裁Ted Kummert在与Karen Forster的对话中深入讨论了SQL ...

    SQL Server 2008基础教程

    SQL Server 2008是微软公司推出的一款关系型数据库管理系统,它在企业级数据管理、分析和报告方面表现出色。本教程将深入探讨SQL Server 2008的基础知识,帮助初学者快速掌握数据库管理和开发的基本技能。 一、SQL ...

    SQL Server的升级之路系列课程(5):升级SQL Server 7.0.2000数据库引擎到SQL Sevrer 2005.Side-by-side (上)

    SQL Server 2005作为微软的一个里程碑式产品,引入了大量新特性和性能优化,为数据库管理和开发带来了显著的改进。 首先,我们来看一下SQL Server 2005相较于7.0.2000的主要改进之处: 1. **增强的数据类型**:SQL...

    SQL_2012_performance_tuning_module_2_table_index_structure

    最后,"Lesson 11: FileStream and FileTable (OPTIONAL)"介绍了一种特殊的数据存储选项——FileStream和FileTable。这两个特性允许存储大量二进制数据,如图像和文档,同时提供了文件系统和SQL Server之间的集成,...

    存储图片到SQL-SERVER数据库中.doc

    SQL Server提供了一个专门用于存储二进制数据的数据类型——`Image`。这种数据类型可以容纳最大为2GB的二进制数据,非常适合用来存储图片等大型文件。 #### 三、创建表结构 在存储图片之前,首先需要在SQL Server...

    Beginning C# 2008 Objects中文版——概念到代码(第2版

    2008年版本的C#在早期版本的基础上进行了多项改进和增强,例如引入了匿名类型、自动属性、扩展方法等新特性,这些都在本书中有所讲解。 书中的"概念到代码"强调了理论与实践相结合的学习方式。作者首先会阐述C#的...

    sqlncli10x86x64.rar

    SQL Server Native Client 10.0 提供了对新特性的支持,例如: 1. 支持新的T-SQL扩展,如窗口函数和高级聚合。 2. 支持更高级别的数据类型,如 Geography 和 Geometry,这些数据类型对于地理空间数据的存储和查询...

    C#+SQL2005+Sqlite文件管理系统,很实用。

    本系统——"C#+SQL2005+Sqlite文件管理系统"便是这样一个解决方案,它充分利用了C#编程语言的强大功能,结合SQL Server 2005与SQLite数据库的优势,实现了对文件的保密管理,同时支持多种类型的文件存储。...

    .NET课程设计——通讯录管理系统

    4. **ADO.NET**:用于访问数据库的关键组件,它提供了连接、命令、数据适配器和数据集等对象,使得C#程序可以方便地操作SQL Server或其他支持.NET的数据源。 5. **数据库设计**:通讯录管理系统通常包含一个关系型...

    C#初级壁纸设计软件(结合SQL)

    【标题】"C#初级壁纸设计软件(结合SQL)"是一个针对初学者的项目,旨在帮助他们理解如何在C#编程环境中结合SQL Server数据库技术来开发应用。这个项目特别适合那些对C#语言有一定基础,并希望拓展到数据库交互领域...

    向数据库上传二进制文件 Delphi

    首先,你需要了解SQL Server数据库中用于存储二进制文件的典型数据类型——`varbinary`或`image`。这两个类型可以存储任意大小的二进制数据。在Delphi中,我们将使用TADOQuery或TADODataset组件与数据库进行交互,并...

    数据库服务器所有代码database_server.rar

    在"database_server"这个项目中,我们可以预期代码会涵盖数据库连接、SQL命令的构造和执行、事务处理(确保数据一致性)、错误处理和日志记录等关键部分。开发人员可能会使用Entity Framework这样的ORM(对象关系...

    ASP.NET源码——文件在线管理系统.zip

    文件管理系统的数据存储通常涉及到数据库,如SQL Server或SQLite。ASP.NET中的Entity Framework是一个对象关系映射工具,允许开发者以面向对象的方式处理数据库操作。系统可能使用EF来创建、读取、更新和删除文件元...

    ASP.NET源码——文件管理系统源码.zip

    这可能会使用ADO.NET或Entity Framework来与SQL Server等数据库进行交互。 5. **权限控制**:为了确保安全,文件管理系统会实现权限控制,限制用户对特定文件或目录的操作。这可能涉及到角色基础的安全性或基于用户...

    ASP,NET源码——[上传下载]Asp.net + Flex实现网络硬盘.zip

    项目可能使用ADO.NET或Entity Framework与SQL Server或其他数据库进行交互。 7. **错误处理和日志记录**:为了调试和监控应用,项目可能包含错误处理和日志记录机制,以便追踪和修复问题。 8. **性能优化**:对于...

    VB毕业设计——vb教师管理系统(源代码+可执行程序+论文+开题报告+外文翻译+答辩稿).zip

    3. **数据库连接与操作**:通常会采用Access或SQL Server作为后台数据库,通过ADO(ActiveX Data Objects)组件进行数据的CRUD(创建、读取、更新、删除)操作。了解SQL语句,如SELECT、INSERT、UPDATE、DELETE等。 ...

    文档-数据库函数-数据类型

    本文将深入探讨“数据库函数”中的一个关键方面——“数据类型”,并特别关注SQL Server中的数据类型。数据类型决定了数据库中列或变量可以存储哪种类型的数据,这对确保数据的准确性和一致性至关重要。 在SQL ...

Global site tag (gtag.js) - Google Analytics