在SQL Server 2008中,FILESTREAM 字段只可以将数据存储在本地磁盘空间,并且FILESTREAM 字段不支持像简单加密和以表为值的参数等功能。此外,你不能在数据库快照或数据库镜像会话中使用包含了FILESTREAM字段的表,不过支持日志传送功能。
3.3 远程BLOB存储API
尽管FILESTREAM 属性将文件系统的性能和可扩展性与在数据库中存储BLOB的可管理性和数据一致性结合起来,但是通常会出现在像 EMC Centera、Fujitsu Nearline、Microsoft windows®这样的文件服务器或其它任何只用于BLOB的存储的系统中存储BLOB更有效或成本利用率更高的场景。在SQL Server 2008中的远程BLOB存储API通过提供一个基于提供商的架构使得可以更容易的将只用于远程BLOB存储解决方案和你的数据库中的关系数据集成起来,这个架构使得你的应用程序可以使用任何BLOB存储而不需要特定的BLOB存储功能或代码。
在架构方面有两个关键部分:
· 客户端库:它是一个能够使得任何提供商和你的BLOB以及关系数据一起使用的组件。客户端应用程序使用客户端库和任何适用的提供商库来插入、更新和查询存储在BLOB中的数据和数据库中存储的数据。
· 供应商库:它是一个由BLOB存储供应商提供的具有代表性的组件(尽管它可以定制开发)。供应商库实现了一个常规接口,提供了一组标准的服务,这些服务抽象了对这个特定的存储执行Create、Fetch、Enumerate、Delete和Garbage Collect操作的细节。.
当你的数据库BLOB需要存储在与数据库不同的服务器上并需要和其它系统协作时,远程BLOB存储API (Remote BLOB Store API)是一个理想的选择。它对BLOB存储没有任何限制。任何提供远程BLOB存储提供商的系统或任何可以建立于远程BLOB存储提供商的系统都支持它。因为与BLOB存储的交互细节被提供商库抽象出来了,所以你可以改变存储而不必改动应用程序,这带来了很大的好处并且降低了开发人员和管理员的复杂度。Microsoft与业内的所有存储供应商合作,以确保提供一个适当的供应商库用于远程BLOB存储API。
使用远程BLOB存储API使你能够灵活地使用不同的系统来管理关系数据和非关系数据。远程BLOB存储API通过链接级别的一致性维护了数据库中的记录与在外部存储的BLOB之间的一致性。例如,如果你通过一个删除语句从数据库中删除BLOB参照,系统将从存储中删除BLOB。然而,使用远程BLOB 存储API不能提供随着BLOB直接存储到数据库中而来的数据级别的一致性,要做到这一点你需要使用FILESTREAM或者varbinary。
3.4 比较BLOB的存储选择
下表比较了SQL Server 2008中的BLOB数据的存储选择。
只使用文件服务器或者BLOB存储 SQL Server BLOB 远程BLOB存储API FILESTREAM 字段
快速流式性能 取决于文件存储 否 取决于BLOB存储 Yes
链接级一致性 是 是 是 是
数据级一致性 否 是 否 是
1