注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

忘忧草的博客

品味人生--精通IT管理和技术

 
 
 

日志

 
 
 
 

实现惰性垃圾收集  

2012-06-01 13:48:52|  分类: Moss2010 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

因为使用 EBS 提供程序会导致孤立 BLOB 文件随时间推移而积聚,所以必须按照适合您网站的计划来删除孤立的 BLOB。

为什么会存在孤立的 BLOB

Windows SharePoint Services 没有提供同步删除在外部存储的 BLOB 文件的功能。在删除某个文件时(从回收站清除),存储在 Microsoft SQL Server 内容数据库中的文件引用和元数据都将被删除,但 Windows SharePoint Services 没有提供对 EBS 提供程序的回调,因而无法从外部 BLOB 存储中删除关联的 BLOB。正因为这一点以及其他一些原因(例如,在存储 BLOB 文件的过程中发生前端 Web 应用程序故障),最终导致了外部 BLOB 存储中积聚孤立的 BLOB 文件。

ISPExternalBinaryProvider 接口不提供删除方法。因为这些 BLOB 文件存储在 SQL Server 事务性边界之外,所以提供程序接口支持使用被动的垃圾收集方案来处置孤立文件。

主题 实现惰性垃圾收集介绍了如何管理针对外部 BLOB 存储中孤立 BLOB 文件的垃圾收集过程。应按照所示顺序执行这些步骤,否则可能会导致有问题的竞争条件。

因为 Windows SharePoint Services 不参与这一垃圾收集方案,所以由 EBS 提供程序负责以适合站点的方式管理垃圾收集过程。

 

 

当 Windows SharePoint Services 无法再在外部 BLOB 存储(包括活动文档、旧版本和回收站文档)中保存对 BLOB 文件的引用时,您可以删除孤立的文件。为了支持此操作,只要外部 BLOB 存储中的孤立文件比例超过您应用程序的实际限制,就可以对孤立的 BLOB 运行垃圾收集。

惰性垃圾收集

下面是使用 EBS 提供程序对外部 BLOB 存储实现垃圾收集时应该采取的步骤。有几个步骤提供了示例代码段来演示特定的任务。但是,代码示例已经过简化并假设存在以下情况:

  • 给定网站的外部 BLOB 文件存储在目录中。

  • 列表适合内存中的哈希表。

  • 垃圾收集正在运行时,不会创建任何新的 BLOB。

尽管这些假设可能不适用于您的网站,但您应该能够根据您的特殊情况调整这些示例。

Bb802825.important(zh-cn,office.12).gif 重要提示:

应按照所示顺序执行这些步骤,否则可能会导致有问题的竞争条件。

 

对外部 BLOB 存储实现垃圾收集
  1. 枚举与给定 SPSite 标识符相对应的 EBS 提供程序命名空间中的所有 BLOB 文件。将这些 BLOB 文件添加到哈希表。

     

    String dirName = Utility.DirFromSiteId(site.ID); FileInfo[] files = Directory.GetFiles(dirName); foreach (FileInfo file in files) {     ht.Add(file.Name, file); }
  2. 找到与 SPSite 标识符相对应的内容数据库中的所有文档。从哈希表中删除这些条目。

    foreach (SPExternalBinaryId blobid in site.ExternalBinaryIds)   {     String fileName = Utility.FileFromBlobid(blobid);         if (ht.Contains(fileName))         {             ht.Remove(fileName);         }   }
  3. 保留在该哈希表中的条目就是外部 BLOB 存储中存在,但在内容数据库中没有相应文件的文件。这些是孤立文件,可将其删除。

    foreach (FileInfo file in ht.Values) {      file.Delete(); }
  评论这张
 
阅读(401)| 评论(0)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017