Sharepoint2010 中的 RBS存储

通常,SharePoint Foundation 的企业级部署中多达 80% 的数据由存储为 BLOB 数据的基于文件的数据流组成。这些 BLOB 对象由与 SharePoint 文件关联的数据组成。但是,如果在 SQL Server 数据库中维护大量的 BLOB 数据,则会使 SQL Server 资源得不到最佳利用。您可以使用包含 BLOB 数据的外部数据存储区以较低的成本、相同的效率获得相同的效果。

 下面将会介绍sharepoint中将文件存储到文件服务器的一种最简单的方式。

首先介绍一下sharepoint中对Blob文件存储到非内容数据库中得两种方式:EBS(External BLOB Storage)和RBS(Remote BLOB Storage)。

一、EBS存储是通过实现COM接口(ISPExternalBinaryProvider)来实现,此接口中只有2个方法StoreBinary和RetrieveBinary。相关文档可以访问MSDN查询。

二、RBS存储,RBS分为两种方式:基于FILESTREAM和自定义的方式来实现,基于FILESTEAM是一种最简便的方式,也是我要介绍的方式;自定义的方式如果是对数据库有深入的了解可以自己编写RBS提供程序,CodePlex网站上有此方式的代码示例,不过示例只是学习用,并没有在实际生产系统中得到测试。

 

下面我们就介绍基于FILESTREAM的方式将文档存储在文件服务器上的步骤:

首先开启数据库的FILESTREAM支持。

当然本文介绍的默认支持为Sharepoint2010 和 SQL Server2008,;数据库默认安装的时候可能没有开启FILESTREAM,此时需要我们核实是否已经开启。打开SQL配置管理器,如下图所示

在开启FILESTREAM之后,在数据库中执行下列语句

EXEC sp_configure filestream_access_level, 2
RECONFIGURE

 

第二、配置内容数据库与文件系统的映射

use [WSS_Content]
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'

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

use [WSS_Content]
alter database [WSS_Content] add file (name = RBSFilestreamFile,
filename = 'c:\RBS') to filegroup RBSFilestreamProvider

其中[WSS_Content]为你sharepoint内容数据库的名称,‘c:\RBS’为需要将BLOB文件存储的位置。

 

第三、安装RBS提供程序。

RBS_x64.msi复制到场中得每个服务器(如果有多个服务器),以管理员身份运行CMD,将命令提示行路径定位到安装文件目录下运行下面代码。

msiexec /qn /lvx*  rbs_install_log.txt  /i RBS_X64.msi TRUSTSERVERCERTIFICATE=true FILEGROUP=PRIMARY DBNAME="WSS_Content" DBINSTANCE="sp2010" FILESTREAMFILEGROUP=RBSFilestreamProvider FILESTREAMSTORENAME=FilestreamProvider_1

其中 WSS_Content 为内容数据库名称 ,sp2010为数据库实例名。

不建议直接运行安装RBS提供程序(RBS_x64.msi),因为如果直接运行此程序,程序会安装一个30天得执行计划,因此建议采用上述提示行的方式安装。

如果只有一个服务器则安装好上面的就可以了,如果有多个服务器,则必须在每个服务器上均安装此提供程序,不过安装代码有所区别,如下:

msiexec /qn /lvx* rbs_install_log.txt /i RBS_X64.msi DBNAME="WSS_Content" DBINSTANCE="sp2010"  DDLOCAL="Client,Docs,Maintainer,ServerScript,FilestreamClient,FilestreamServer"

 

在安装完成上述操作后可检查内容数据库中是否多出以“mssqlrbs”开头的表,如果有说明安装成功,如果没有则需要将RBS_X64卸载,重新执行上述步骤。

 

第四、为内容数据库启用RBS

启动sharepoint shell

运行下列代码:

(1) $cdb = Get-SPContentDatabase "WSS_Content"
获取到指定的内容数据库(SPContentDatabase)对象实例,绿色所标注的"WSS_Content"需要更换成在你的环境中,实际的内容数据库名称。

(2) $rbss = $cdb.RemoteBlobStorageSettings
获取内容数据库的RBS设置(SPRemoteBlobStorageSettings)对象实例。

(3) $rbss.Installed()
检查在内容数据库上是否安装了RBS,如果需要,更新相应的属性值。

(4) $rbss.Enable()
在内容数据库上启用RBS。

(5) $pvdName = $rbss.GetProviderNames()[0]
获取第一个注册到内容数据库上的RBS Provider的名称。

(6) $rbss.SetActiveProviderName($pvdName)
为内容数据库设置要激活的RBS Provider。

然后,你可以执行"$rbss"来查看它的一些属性值,如果设置正确,它输出的内容应该如上图所示。

如果你启用RBS FILESTREAM Provider的内容数据库中,已经存储了一个网站集,那么在你启用了RBS Provider之后,网站集里面的文档,并不会自动的马上通过FILESTREAM,转存到NTFS文件系统上。只有新增的文档才会被存储到NTFS文件系统上,网站集里面之前上载的文档,仍然会保存在内容数据库里面。如果你希望现在将那些旧的文档,统统转存到我们所指定的NTFS文件系统中,那么可以继续在SharePoint 2010 Management Shell中执行下面这个指令:

(7) $rbss.Migrate()

如果你希望设置一个文档大小阈值,只有大小超过此阈值的文档,才通过RBS FILESTREAM Provider存储到NTFS文件系统上,而小于此阈值的文档,仍然存储在内容数据库中,那么可以在SharePoint 2010Management Shell中继续执行下面的指令(假设阈值是1048000字节,也就是1M):

(8) $rbss.MinimumBlobStorageSize = 1048000

 

结束:

上述步骤操作成功后,可在文档库上传一个超过100KB (如果设置了阈值,则上传超过阈值的大小)的文档,然后检查c:\RBS中是否有新添加的文件。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值