这两天在研究怎么写一个RBS Provider,可惜文档实在是很缺乏,基本上除了一篇Spec之外,就只有SQL产品组写的一个sample了。之后如果研究有结果,再整理成文章吧,现在先讲讲怎么直接安装并使用RBS FILESTREAM Provider。
如果使用SharePoint 2007作为文档管理平台,它很让人诟病的一点就是,SharePoint 2007将文件本身直接存储在SQL Server数据库之中。虽然Windows SharePoint Services 3.0 SP1增加了一个External BLOB Storage(EBS)接口,但是微软并没有提供实现,而是需要开发人员自己来实现它。
SharePoint 2010仍然对EBS提供兼容,但并不推荐使用EBS,推荐的解决方案,乃是使用SQL Server 2008 Remote BLOB Storage(RBS)。
SQL RBS是一组API,通过RBS,一个SQL Server 2008数据库就不再需要将大二进制数据(BLOB)存储在数据库内部,而是可以存储到外面的某个地方,在数据库里面可能只会存储一个对外部BLOB数据的引用。SQL Server 2008和SQL Server 2008 R2都支持RBS。
听起来RBS实在是一个很好的东东。但是(总是有但是),RBS仅仅是一组API,换句话说,RBS可以让开发人员利用这组API,开发出一个RBS Provider,真正实现对BLOB数据的存取。如果没有RBS Provider,RBS自己可不会自动的将BLOB存储到某个指定的地方去。不同的RBS Provider,可以让我们将BLOB存储到文件系统、磁盘存储设备、文件服务器等等各种地方,反正不继续放到SQL Server数据库里面就对了。
在你对RBS有了初步认识之后,我们接着介绍SQL Server 2008里面的另外一个新特性:FILESTREAM。下面这句话摘自SQL Server 2008联机丛书:“通过将 varbinary(max) 二进制大型对象 (BLOB) 数据以文件形式存储在文件系统上,FILESTREAM 使 SQL Server 数据库引擎和 NTFS 文件系统成为了一个整体。”所以,FILESTREAM可以让管理员选择将SQL Server数据库里面的varbinary(max)类型BLOB数据,存储到本地NTFS文件系统上。在通过FILESTREAM对BLOB数据进行存取的时候,还能顺便能够享受到数据库事务处理的好处。
听起来,FILESTREAM和RBS很相似,是不是?但其实,RBS和FILESTREAM是两个不同的东东,它们互不依赖。RBS是一组API接口,通过这组API,应用程序就能将BLOB数据存储到数据库之外的某个地方,具体实现由开发人员创建的RBS Provider来完成。FILESTREAM是SQL Server 2008内置的一个特性,它能将原本存储在数据库里面的BLOB数据,存储到服务器本地的NTFS文件系统上。
SharePoint 2010所利用的,是RBS API,而并非FILESTREAM特性。所以,如果没有一个RBS Provider,我们并不能马上就将SharePoint 2010里面存储的文件,存储到数据库之外的某个地方去。但是,既然FILESTREAM特性已经拥有了现成的将数据库中的BLOB数据存储到NTFS文件系统上的能力,为什么不能直接使用FILESTREAM,做一个RBS FILESTREAM Provider,也就是利用FILESTREAM的功能实现的一个RBS Provider呢?这样,岂不是就能将SharePoint 2010中的文件,都存储到NTFS文件系统上了吗?
微软也想到了,所以,微软以特性包(Feature Pack)的形式,提供了一个RBS FILESTREAM Provider。你可以从这里下载x64版本的RBS FILESTREAM Provider。但是要在SharePoint 2010系统上安装并使用它,也是需要按照一定的步骤来操作的。下面就是具体的操作步骤。
1、确定SQL Server 2008已经启用了FILESTREAM
在安装SQL Server 2008时,会有一个步骤提示是否安装FILESTREAM。如果你不确定是否安装了此特性,从SQL Server 2008服务器上打开SQL Server配置管理器,从左边选中"SQL Server 服务",然后从右边的窗格中用鼠标右键点击运行的SQL Server实例,选择"属性"菜单项。
在打开的属性窗口中,选择"FILESTREAM"选项卡,然后选中启用FILESTREAM的选择框,点击"确定"按钮。
打开SQL Server Management Studio,选中左侧的SQL Server实例,然后点击工具栏区域的"新建查询",打开一个查询界面,然后在里面输入下面的SQL语句并执行。
EXEC sp_configure filestream_access_level, 2
RECONFIGURE