2.2 在SQL Server 2008中的非结构化数据的目标
非结构化数据面临的相关挑战反应了那些开始为数字内容建立解决方案的公司所关注的一些常见情况:
· 管理多个不同的平台来处理关系数据和非关系数据,从而导致不必要的复杂性。
· 这些分散的数据存储使得对于开发人员来说增加了复杂度,并提高了经理的部署难度。
· 开发人员和数据库管理员缺乏在这些不同的数据类型中可以使用的服务。
SQL Server 2008旨在解决这些问题,通过:
· 降低管理这些不同的数据类型的成本。
· 简化使用关系数据和非关系数据的应用程序的开发工作。
· 将现在只用于关系数据的功能扩展到非关系数据。
3. 在SQL Server 2008中存储非结构化数据
依赖于关系数据和非关系数据的应用程序通常使用下面的三个架构中的一个:
· 数据库中的关系数据以及文件系统和文件服务器上的非关系型二进制大对象(BLOB)。
· 数据库中的关系数据和只用于BLOB的存储中的非关系数据。
· 数据库中的关系数据和非关系数据。
每一个方法都有其优劣之处。例如,在文件服务器或只用于BLOB的存储中存储非结构化数据会降低每GB所花费的费用,但是通常会增加管理和建立应用程序的复杂性,因为应用程序不得不维护包含BLOB数据的数据库和单独的系统中的记录以及这些记录所关联的对象间的完整性。另一方面,在数据库中存储BLOB数据方便地集中了数据存储,但是通常带来了更高的成本并会导致性能下降。
SQL Server 2008推出了两个用于存储BLOB数据的新功能:
· FILESTREAM:是一个你可以在varbinary字段上设置的属性,以便数据存储在文件系统中(因此受益于它的快速流式功能和存储能力)但是直接在数据库的上下文中管理和访问。:
· 远程BLOB存储:一个客户端应用程序编程接口(API),它降低了建立依赖于一个用于BLOB的外部存储和一个用于关系数据的数据库的应用程序的复杂性。
此外,SQL Server 2008继续通过varbinary 数据库类型支持标准的BLOB字段。
3.1 SQL Server BLOB
SQL Server 2005推出了varbinary(max)数据类型,它使得你可以在一个SQL Server字段或变量中存储最大为2,147,483,647字节的大型二进制数据值。当使用修订过的max时,你可以通过设置large value types out of row表选项来控制数据怎样存储在物理的表的数据页面中。当这个选项设置为ON时,所有的值存储在单独的链接页面上,而在这个记录的数据页面上会保存一个指向这些页面的16位的根指针。当这个选项设置为OFF时,最大为8000字节的值存储在这行的数据页面上,而更大的值存储在单独的链接页面上。
尽管新的FILESTREAM 和远程BLOB能力是设计用来提供比标准的varbinaryBLOB字段更好的性能和可管理性,但有一些场景是使用varbinary 字段更适合的(具有代表性的是当BLOB平均规模小于250 KB的时候。)
3.2 FILESTREAM 属性
在SQL Server 2008中,你可以将FILESTREAM 属性应用到一个varbinary 字段,然后SQL Server 为这个字段在本地NTFS文件系统上存储数据。在文件系统上存储数据带来两个重大的优势:
· 性能可匹配文件系统的流性能。
· BLOB 规模只受文件系统的空间规模限制。
然而,字段可以像SQL Server中的其它任何BLOB字段一样来管理,所以管理员可以使用SQL Server的可管理性和安全功能来集成BLOB数据管理和关系数据库中的其它数据——而不需要单独管理文件系统数据。在SQL Server中将数据定义为一个FILESTREAM字段还确保了在数据库中的关系数据和存储在文件系统中的非结构化数据在数据级的一致性。FILESTREAM字段的使用和BLOB字段一样,这意味着维护操作的完全集成(例如备份和恢复)、和SQL Server安全模型的完全集成、以及纯事务的支持。
应用程序开发人员可以通过两个编程模型中的一个来使用FILESTREAM数据;他们可以使用Transact-SQL就像对待标准的BLOB字段一样的来访问和操纵数据,或者他们可以使用Win32流式API和Transact-SQL事务型语义来确保一致性,这意味着他们可以对FILESTREAM BLOB使用标准的Win32读/写调用,这和他们与文件系统上的文件交互时所做的一样。
在SQL Server 2008中,FILESTREAM 字段只可以将数据存储在本地磁盘空间,并且FILESTREAM 字段不支持像简单加密和以表为值的参数等功能。此外,你不能在数据库快照或数据库镜像会话中使用包含了FILESTREAM字段的表,不过支持日志传送功能。