窗外

RBS in SharePoint 2010

传说在大部分的SharePoint应用中,存储在Content Database中的数据,其中只有20%是关系型数据,而差不多80%是非关系型数据,也就是类似Word文档这样的BLOB数据。对这些BLOB数据的读写访问很容易在SQL端造成性能瓶颈。因此,MOSS 2007在SP1之后提供了ISPExternalBinaryProvider接口,用户可以通过这个接口开发自定义应用,将BLOB数据存储在Content DB之外。而SharePoint 2010提供了基于SQL Server 2008的Filestream的Remote Blob Storage (RBS)功能,只需要配置一下就可以将BLOB数据存储在Content DB之外了,完全不需要做开发。

SharePoint 2010中的RBS配置并不复杂,TechNet上的指南步骤很详细。配置了RBS之后,用户上传的大于100KB的文件都会被直接存储在文件系统上。如果想控制存储在文件系统上的文件的大小,我们可以通过设置RemoteBlobStorageSettings.MinimumBlobStorageSize属性来实现。例如下面的命令将存储在文件系统的文件的最小尺寸设置为100MB ($cdb为对应的Content DB对象):

$cdb.RemoteBlobStorageSettings.MinimumBlobStorageSize=104857600

$cdb.Update()

这样,小于100MB的文件将被存储在Content DB内,而大于100MB的文件将被存储在文件系统上。需要注意的是,小于100MB的文件虽被存储在Content DB内,但不在原本的AllDocStreams表内,而是在RBS相关的表内。

根据我的测试,启用RBS之后,文档库中的文档无法使用Office Web App打开,而且每次修改并保存文档之后,会在BLOB存储目录里产生一个新文件,修改两次就会有2个文件拷贝,3次就会有3个。不知道是不是设置的缘故。

Update:

关于修改后生成新文件的问题,通过RBS存储的文件是只读的,当新的文件产生时,旧文件被标记为“可删除”,经过一段retention时间后,RBS的垃圾收集功能会将它自动清理掉。

Tags

Leave a Reply

Your email address will not be published. Required fields are marked *