FILESTREAM 与 SharePoint 2010

原文发布于 2011 年 4 月 21 日(星期四)

作者: Microsoft Corporation - SharePoint 高级技术产品经理 Bill Baer

FILESTREAM 是 SQL Server 2008 中的一项新功能,通过它可以在 NTFS 文件系统上存储非结构化数据。FILESTREAM(本地或远程)在 SharePoint 2010 中作为一项减少资本支出(通过在内容可寻址或商品存储上存储大型二进制非结构化数据来实现)的机制而受到支持。

非结构化数据

非结构化数据是指在 SharePoint 中不遵守定义模型或不适合放入关系表的信息,非结构化数据可以引用 Microsoft Office 文档文件格式、视频、音频以及相关的文件类型。

 

结构化数据

SharePoint 中的结构化数据是指与其对应的非结构化数据或 BLOB 关联的元数据。关系数据库经常作为结构化数据的示例而加以引用。

 

SQL Server 和非结构化数据存储

通过 SQL Server、RBS、SQL BLOB 和 FILESTREAM 存储非结构化数据的方法有三种:

  • 远程 BLOB 存储 (RBS),其中 SharePoint 依靠 SQL Server 中的新层读取或更新存储在数据库外单独的 BLOB 存储(文件系统或专用的 BLOB 存储)中的 BLOB 数据
  • SQL BLOB 是指 SharePoint 传统的 BLOB 存储,BLOB 数据与结构化元数据并排存储在内容数据库中
  • FILESTREAM

 

FILESTREAM 概述

FILESTREAM 针对 varbinary(max) 数据类型进行实施,告知数据库引擎通过 FILESTREAM 文件组(包含文件系统目录而非文件本身,亦称为数据容器)将非结构化数据存储在文件系统上。数据容器是数据库引擎存储和文件系统存储之间的接口。varbinary 是为存储在 SharePoint 2010 内容数据库中的二进制大型对象指派的二进制数据类型,引用长度可变的二进制数据。(MAX) 是指一个值,max 指示最大存储大小为 2^31-1 字节(即 2GB)。远程 BLOB 存储不提供超过 SharePoint 规定的 2GB 文件大小限制的机制。

 

在 SharePoint 2010 中,远程 BLOB 数据在为 RBS 配置的内容数据库中由唯一的标识符进行引用(见图)。

 

 

 

 

 

FILESTREAM 提供很多与性能有关的好处 1) FILESTREAM 使用 NT 系统缓存来缓存文件数据,可降低 FILESTREAM 数据对数据库引擎性能的影响,2) 不使用 SQL Server 缓冲池,因此内存可用于进行查询处理。

 

FILESTREAM 在 SharePoint 用于存储大型 BLOB 数据(例如可从超过 1MB 的 FILESTREAM 或 BLOB 数据获益的视频文件)的应用场景中提供最佳的值。

 

特殊注意事项

 

FILESTREAM 和业务连续性管理

 

数据库镜像不支持 FILESTREAM,因为 FILESTREAM 文件组不能在主服务器上创建,且不能为包含 FILESTREAM 文件组的数据库配置数据库镜像。如果 FILESTREAM 提供程序用于在本地存储 BLOB 数据(在同一内容数据库中),则不能针对数据库镜像配置数据库。

 

如果 FILESTREAM 提供程序配置为在单独的 SQL 数据库中或使用第三方的 BLOB 存储时存储 BLOB 数据,可以对内容数据库进行镜像;但是,数据库镜像将仅应用于内容数据库而非 BLOB 数据。BLOB 数据需要单独进行处理,并与关联的元数据(内容数据库)保持同步。对于 FILESTREAM BLOB 数据库,可以通过日志迁移来实现。

 

若要了解有关 FILESTREAM 和 SQL Server 远程 BLOB 存储之间的区别,另请参阅 https://blogs.msdn.com/b/sqlrbs/archive/2009/11/18/sql-server-remote-blob-store-and-filestream-feature-comparison.aspx(该链接可能指向英文页面)

 

FILESTREAM 和 Office Web Applications 缓存

 

Office Web Applications 缓存由 Word Web Applications 和 PowerPoint Web Applications 用于创建请求通过浏览器查看的文档版本,在针对同一个文档存在多个请求的情况下,通过制作可用文档或演示文稿的缓存版本来改善服务器计算机的性能并降低其资源消耗。

 

Office Web Applications 缓存发生在两个不同的层中,即服务器文件系统上和按 Web 应用程序托管的“专用”网站集中。通过 Office Web Applications 发出的文档或演示文稿请求同时通过两个缓存进行处理,因为图像针对客户端使用进行呈现。激活了 Office Web Applications 功能的 Web 应用程序内的所有网站集均使用这两个缓存位置。

 

配置了 FILESTREAM 的内容数据库将在配置的提供程序位置存储文档或演示文稿的缓存版本。 建议在未配置 FILESTREAM 的数据库上配置 Office Web Applications 缓存。

 

使用 SharePoint 2010 配置 FILESTREAM

以下说明旨在单服务器部署上用于演示,并实施本地 FILESTREAM 提供程序。

 

在目标 SQL Server 实例上启用 FILESTREAM

 

1. 在“开始”菜单上,依次指向“所有程序”、“Microsoft SQL Server 2008 (R2)”、“配置工具”,然后单击“SQL Server 配置管理器”。

2. 在服务列表中,右键单击“SQL Server Services”,然后单击“打开”。

3. 在“SQL Server 配置管理器”管理单元中,找到要在其上启用 FILESTREAM 的 SQL Server 实例。

4. 右键单击该实例,然后单击“属性”。

5. 在“SQL Server 属性”对话框中,单击“FILESTREAM”选项卡。

6. 选中“为 Transact-SQL 访问启用 FILESTREAM”复选框。

7. 如果您想要从 Windows 读取或写入 FILESTREAM 数据,请单击“为文件 I/O 流访问启用 FILESTREAM”。在“Windows 共享名”框中输入 Windows 共享名。

8. 如果远程客户端必须访问存储在此共享上的 FILESTREAM 数据,请选中“允许远程客户端具有 FILESTREAM 数据的流访问权限”。

9. 单击“应用”。

10. 依次单击“开始”、“所有程序”、“Microsoft SQL Server 2008 (R2)”、“SQL Server Management Studio”。

11. 在 SQL Server Management Studio 中,单击“新建查询”以显示查询编辑器。

12. 在查询编辑器中,输入以下 Transact-SQL 代码:

 

EXEC sp_configure filestream_access_level, 2

 

在查询编辑器中,输入以下 Transact-SQL 代码:

 

RECONFIGURE

配置 RBS 数据存储

 

1. 依次单击“开始”、“所有程序”、“Microsoft SQL Server 2008 (R2)”、“SQL Server Management Studio”。

2. 展开“数据库”。

3. 选择您想要为其创建 BLOB 存储的内容数据库,然后单击“新建查询”。

4. 在 SQL Server Management Studio 中,单击“新建查询”以显示查询编辑器。

5. 在查询编辑器中,输入以下 Transact-SQL 代码:

 

use [Database Name]

 

if not exists (select * from sys.symmetric_keys where name = N'##MS_DatabaseMasterKey##')create master key encryption by password = N'Admin Key Password !2#4'

 

在查询编辑器中,输入以下 Transact-SQL 代码:

 

use [Database Name]

 

if not exists (select groupname from sysfilegroups where groupname=N'RBSFilestreamProvider')alter database [Database Name] add filegroup RBSFilestreamProvider contains filestream

 

在查询编辑器中,输入以下 Transact-SQL 代码:

 

use [Database Name]

 

alter database [Database Name] add file (name = RBSFilestreamFile, filename = 'c:\BlobStore') to filegroup RBSFilestreamProvider

安装 Microsoft SQL Server 2008 R2 远程 Blob 存储

 

从 Microsoft SQL Server 2008 R2 功能包下载 Microsoft SQL Server 2008 R2 远程 Blob 存储的 x64 安装包,网址为 https://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=ceb4346f-657f-4d28-83f5-aae0c5c83d52

 

使用管理员权限打开命令提示符并执行下面的命令来安装前一个步骤中下载的 RBS.MSI:

 

msiexec /qn /lvx* rbs_install_log.txt /i RBS.msi TRUSTSERVERCERTIFICATE=true FILEGROUP=PRIMARY DBNAME="<Database Name>" DBINSTANCE="<Instance Name>" FILESTREAMFILEGROUP=RBSFilestreamProvider FILESTREAMSTORENAME=FilestreamProvider_1

 

注意

在上面的语句中指定 RBS.MSI 的完整路径,即 C:\Users\Administrator\Desktop\RBS.MSI。替换 DBNAME 和 DBINSTANCE 的值以符合您的环境。

 

启用远程 BLOB 存储

1. 在“开始”菜单上,单击“所有程序”。

2. 单击“Microsoft SharePoint 2010 产品”。

3. 单击“SharePoint 2010 Management Shell”。

4. 在“SharePoint 2010 Management Shell”中,输入以下 Windows PowerShell 语句以设置要配置的内容数据库:

$database=Get-SPContentDatabase –Identity “Database Name”

在“SharePoint 2010 Management Shell”中,输入以下 Windows PowerShell 语句以获取保存用于确定内容数据库如何使用 Microsoft SQL Server 远程 Blob 存储的设置的对象:

$rbs=$database.RemoteBlobStorageSettings

在“SharePoint 2010 Management Shell”中,输入以下 Windows PowerShell 语句以确定是否为选择的内容数据库安装了 RBS:

$rbs.Installed()

注意

$rbs.Installed() 的结果应该为 True,如果结果为 False,请通过查看 rbs_install_log.txt 来验证 RBS.MSI 是否已安装成功。确保已在“SharePoint 2010 Management Shell”中运行安装语句,输入以下 Windows PowerShell 语句来为选择的内容数据库启用 RBS:

 

$rbs.Enable()

在“SharePoint 2010 Management Shell”中,输入以下 Windows PowerShell 语句来为选择的内容数据库设置 RBSprovider:

$rbs.SetActiveProviderName($rbs.GetProviderNames()[0])

 

$rbs

 

注意

$rbs 的结果应为:

表 1

 

表 1 附录

 

Enabled 指定是否已为选择的内容数据库启用 RBS。

 

ActiveProviderName 是将存储新文件的 SQL 远程 Blob 存储提供程序的名称。如果不使用 SQL 远程 Blob 存储保存新文件,则该值为空。

 

MinimumBlobStorageSize 是指值得考虑使用 RBS 存储的 BLOB 的最小大小,超过指定的 MinimumBlobStorageSize 的 BLOB 数据将存储在 RBS 数据存储中。

 

FILESTREAM 性能数据显示超过 1MB 的 BLOB 数据提供最高效的流性能。另请参阅 https://msdn.microsoft.com/zh-cn/library/cc949109(sql.100).aspx(该链接可能指向英文页面)

 

 

若要配置 MinimumBlobStorageSize,请执行以下操作:

1. 在“开始”菜单上,单击“所有程序”。

2. 单击“Microsoft SharePoint 2010 产品”。

3. 单击“SharePoint 2010 Management Shell”。

4. 在“SharePoint 2010 Management Shell”中,输入以下 Windows PowerShell 语句以将 MinimumBlobStorageSize 配置为 1MB:

$database = Get-SPContentDatabase “Database Name”

 

$database.RemoteBlobStorageSettings.MinimumBlobStorageSize=1048576

 

$database.Update()

UpgradePersistedProperties 指定已删除或更改的字段名称和值的集合。

 

验证安装

若要验证 FILESTREAM 配置和 RBS 安装,请执行以下操作:

 

1. 依次单击“开始”、“所有程序”、“Microsoft SQL Server 2008”、“SQL Server Management Studio”。

2. 展开“数据库”。

3. 选择您想要为其创建 BLOB 存储的内容数据库,然后单击“新建查询”。

4. 在 SQL Server Management Studio 中,单击“新建查询”以显示查询编辑器。

5. 在查询编辑器中,输入以下 Transact-SQL 代码:

USE [Database Name]

SELECT * FROM dbo.DatabaseInformation

确认 RBSCollectionId 行和 RBSProvider 行是否都可用。

 

测试 RBS 数据存储

1. 在配置的内容数据库中选择网站上所需的文档库。

2. 上载大于 1 MB 的文件。

3. 在包含 RBS 数据存储的计算机上,单击“开始”,然后单击“计算机”。

4. 通过浏览找到 RBS 数据存储目录。

5. 通过浏览找到文件列表并打开修改日期离现在最近的文件夹(非 $FSLOG)。在该文件夹中,打开修改日期离现在最近的文件。验证该文件是否与您上载的文件具有相同的大小和内容。如果不是,请确保已正确安装并启用 RBS。

数据存储目录结构与下图中的类似。

 

 

注意

当上载的文档大于配置的 MinimumBlobStorageSize 时会显示“URL '<Document Library>/File' 无效。它可能指向不存在的文件或文件夹,或者是指向不在当前网站中的有效文件或文件夹。”事件错误。打开 SQL Server 配置管理器并选中“为文件 I/O 流访问启用 FILESTREAM”,然后重新启动 SQL Server (MSSQLSERVER) 服务。

 

其他资源

 

 

类别: 我们如何实现SharePoint 2010

发布时间: 2011 年 4 月 22 日上午 9:00

这是一篇本地化的博客文章。请访问 FILESTREAM with SharePoint 2010 以查看原文