【问题标题】:SharePoint 2013 RBS Strange behaviourSharePoint 2013 RBS 奇怪的行为
【发布时间】:2014-02-04 04:40:21
【问题描述】:

我们使用 RBS 将 SharePoint 文件存储在共享点内容数据库之外。这适用于 SP2010。但是当我们移动到 SharePoint 2013 时,我们发现该文件有一些额外的数据并添加到 RBS 目录中的文件中。有没有办法让 SharePoint 不要添加这个额外的二进制数据。由于我们的用户基本上是通过网络上的只读共享文件夹访问 RBS,而我们已经完成了一项依赖于此的业务。

【问题讨论】:

    标签: sharepoint sharepoint-2010 sharepoint-2013 remote-blob-store


    【解决方案1】:

    您可能指的是粉碎存储 - 在 SP2010 中,对于存储在 SP 站点上的每个文件版本,都有一个 FILESTREAM blob (.rbsblob)(例如,文件存储在内容数据库中,但其内容被卸载到 RBS )。在 SP2013 中,粉碎存储可以将单个文件版本粉碎成多个较小的部分并用额外的字节填充它们,这意味着您不能轻松地从 RBS 本身访问单个文件 - 而且您不应该 em> 到任何一个!这意味着当您上传文件“document.docx”时,您不会得到一个 blob,而是多个较小的 blob(取决于大小和设置),它们不容易合并在一起 - 您在RBS 就是这些多个 blob。您可以做的最好的事情是防止文件被粉碎,但这是一种肮脏的方式:How to disable Shredded Storage in SharePoint 2013? - 但是,这仅适用于新上传的文件并且会影响存储和性能(粉碎存储使您能够例如仅存储增量单个文档,假设您有 10 个文档版本,其中 50% 相同 - 这 50% 将作为共享碎片在所有版本之间共享,而不是像在 SP2010 中那样存储多次)。

    一个可能有用的选项是映射SharePoint site to a network drive 并让用户直接使用它而不是 RBS 目录 - 这样,文件将通过 RBS 访问,而不会显式暴露 blob(碎片)本身。

    另一种选择是使用SPFile.OpenBinary() 下载/打开特定 RBS 存储的文件,这将合并 RBS 存储的碎片并返回单个(原始)文件,然后您可以将其存储在其他位置(例如,存储到另一个共享文件夹中) ) - 这样,您正在复制文件,但这几乎就是它应该是的样子。例如,通过这种方式,您可以打开在 SP 站点上可见但在 RBS 中存储为 5 个 .rbsblob 碎片的文件“document.docx”,并将其另存为“document.docx”其他地方(SP 之外)。

    【讨论】:

    • 我的下一个问题是它们如何生成填充字节?
    • 我应该怎么做才能从 SP2010 迁移没有填充的 RBS 文件?
    • 我不知道填充字节是如何计算的......我想回答这个问题需要逆向工程。 :) 将文件迁移到 2013 取决于您的升级计划 - 没有单一的解决方案。如果您希望仅从 RBS 重建原始文件(没有 SP 内容数据库),这是一个难题,我猜想再次需要逆向工程。将 blob 从 2010 移动到 2013 的一种选择是获取 2010 blob 并将它们作为原始文件重新上传到 SP2013,以便它们被粉碎。这是一个广泛的问题,有很多角度,取决于您想要实现的目标......
    【解决方案2】:

    RBS 存储在 SharePoint 内部,您不应直接访问其文件。无法保证数据将保持here 所述的原始格式:

    虽然 RBS 可用于在外部存储 BLOB 数据,但访问或 不支持使用其他任何工具或产品更改这些 BLOB 比 SharePoint 2013。所有访问都必须使用 SharePoint 2013 仅限。

    我也不知道所描述的行为有任何与 RBS 相关的配置。

    【讨论】:

    • 我们有从 SP2010 生成的 rbsblobs,我们需要让它们通过 SP2013 访问。这是一件非常重要的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多