zoukankan      html  css  js  c++  java
  • Moss/Sharepoint 看RBS如何解决二进制文件的存储(BLOB)

      首先我们要了解什么是RSB?

      即Remote Blob Storage,翻译成中文即远程大对象存储。BLOB,即二进制大对象。这个数据可以是文本格式的或二进制格式的。当在SQL Server中使用BLOB数据时,每条记录的数据量一般都远远超过了一个单独记录的8K的限制。

      近段时间,我花了很多时间有点试图找到一个能够真正处理SharePoint 2010和RBS 互动的方法.这里我发表一遍文章作为总结,我还是介绍codelplex上面的一个解决方案吧,这样大家能够对这样的问题有一个整体的把握。解决这个问题对于我个人来说,也增加了了解有关SQL Server 2008,RBS框架,和SharePoint 2010中的相关知识。

      Sharepoint对FILESTREAM 提供程序是有非常多的限制的,这点你可以阅读相关的SDK来获取相关知识。首先,它只能用于在SQL Server的本地卷。所以,你不能廉价的储存的二进制文件。必须支付高昂的微软授权费用。此外,默认情况下,FILESTREAM的供应商似乎把所有的二进制存在一个文件里。 NTFS格式曾经当一个文件特别大的时候有一些问题。这可能是在较新的平台已经解决了,但总的来说,拥有超大文件的系统多多少少会有一些问题的。我坚信,绝大部分人是不会愿意在自己的系统中出现超大型文件的。

      为了让sharepoint能够按照我们的意愿来工作,我们需要自己定义一个provider。本文章所使用的程序源代码我会全部打包成附件给你。你可以在RBS解决方案下载

      在我们开始之前,你必须对你的sharepoint服务器的物理结构有一定的了解。确定有多少个前端服务器,这有一个专属名词叫Web Front-End服务器(WFE),如果你有多个WFE,那么你就必须在每台WFE上重复2到9步的操作。

    现在我们开始:

    1.在SQL的企业管理器里面运行下面的语句

    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'

    2.下载 rbs_x64.msi 并且保存到你的每一台WFE上面

    3.运行下载的程序

    这里再介绍一下安装步骤。

    注意:以下过程只是解决那些安装不成功的一个例子罢了,具体项目里面,还需具体情况具体分析。

    (1)FileStream一般是没有必要安装的

    (2)这里我们使用default


    (3)这里没什么讲的

    (4)配置log,我这里把所有的log都设为警告,你可以根据你的实际情况来填写


    (5)这一步,你需要谨慎,因为RBS将会在你的内容数据库运行相应的脚本,当然你还可以设立一个任务,在将来的某个时刻运行,这一点对于部署到真实环境是非常重要的。一般都会选择在夜深人静的时候。。·#%¥

    (6)当程序运行完脚本之后,你的内容数据库将会变成下面这个样子

    4.下载 RBS解决方案当然你也可以自己写一个,不管怎么样,这都是一个很好的例子

    5.看在这篇文章的份上,创建一个文件夹吧,这里为了掩饰,我创建为  c:\CodePlex_RBS_Provider

    6.将附件中Binaries文件夹拷贝到c:\CodePlex_RBS_Provider 下面

    7.现在用记事本来写一段命令,我这里创建一个c:\CodePlex_RBS_Provider\InstallProvider.cmd

    不用着急我这里没有复制代码,代码已经在附件里面了,这里只是一个演示而已。

    8.以管理员身份(非常重要)运行这些命令

    这里附上一张运行良好的截图

    10.以管理员身份运行 SharePoint 2010 Management Shell.

    11.运行下列命令让我们的RBS PROVIDER来处理我们的内容数据库

    $site = get-spsite http://siteurl/ 
    $rbss = $site.ContentDatabase.RemoteBlobStorageSettings
    $rbss.Enable()
    $rbss.SetActiveProviderName($rbss.GetProviderNames()[0])
    $rbss

    同样,为了避免大家出错了还不知道,我这里附上一张运行良好的截图

     OK ,你已经完成了所有的操作!

    说了这么久,还没有让大家看看我的最后效果。下面我来证明一下这个方法是哦真正有效的。

    未装RBS之前,我运行如下命令得到如下结果。

    安装好若RBS之后,来看看我的成就

    那么究竟哪些数据到哪里去了呢?此时,你不会怀疑我把你的所有数据都搞掉了吧。。。那你岂不是要恨上我一小会?呵呵,答案马上揭晓:

    你的数据都在这里好好的存着呢.下面再来谈到两个问题,免除你使用这个方案的后顾之忧。

     

    如何使用已有的BLOB内容

    如果你要使用已有的BLOB内容,你运行下面的 PowerShell 就可以了

    $rbss.Migrate() ;

    这条命令将会把所有的已有的BLOB内容传送到当前活动的RBS Provider存储。

    如何将所有的BLOB数据返回到数据库中

    如果我们需要遗弃blob的存储方式或者换一个更好的BLOB provider,我们需要PowerShell 运行一下命令

    $rbss.SetActiveProviderName("")
    $rbss.Migrate()

    这句代码会将你所有的blob数据返回到数据库中存储。

    有了以上两个解决办法,真可谓是退可守,进可攻。你还在犹豫什么呢?赶快试试吧。

    OK 终于写完了这篇文章,今天博客园好像有点问题,中途页面访问不了,提交错误等等。不过,即使如此,我还是完成了这篇文章。

    附件:sharepoint的RBS解决方案                         如果你觉得这篇文章有价值,请点击推荐

  • 相关阅读:
    C# 实现list=list.OrderBy(q=>q.字段名).ToList(); 按多个字段排序
    c# dev gridcontrol 焦点行失去焦点有背景颜色
    c# dev gridcontrol format rule的使用
    鼠标模拟左键单击
    IDEA快捷键/本文仅供自己参考使用如有侵权立删
    Git学习笔记
    bootstrap帮助文档
    bootstrap笔记
    关于Action模型驱动无法获取属性的问题
    SSH整合hibernate无法正常自动生成表
  • 原文地址:https://www.cnblogs.com/Creator/p/1918725.html
Copyright © 2011-2022 走看看