删除一段时间内未接触的Azure blob存储内容

删除一段时间内未接触的Azure blob存储内容,azure,azure-storage-blobs,lastaccesstime,Azure,Azure Storage Blobs,Lastaccesstime,我开发的应用程序基本上允许用户上传内容并存储在Azure Blob存储中 由于内容的本质是在用户之间快速共享,因此许多内容在一段时间后很快就不会被触及。但对于某些内容可以反复使用 为了阻止blob存储容量空前增长,我计划编写一个工具,基本上可以找到一段时间内未使用的blob,并将其从存储中删除 如果是标准文件系统,我可以使用“上次访问时间”来指示上次使用文件的时间。然而,我似乎找不到blob的类似属性来确定最后的访问时间 那么,有没有人遇到过这种情况,实现这一点的最佳方式是什么? 还是我太担心这

我开发的应用程序基本上允许用户上传内容并存储在Azure Blob存储中

由于内容的本质是在用户之间快速共享,因此许多内容在一段时间后很快就不会被触及。但对于某些内容可以反复使用

为了阻止blob存储容量空前增长,我计划编写一个工具,基本上可以找到一段时间内未使用的blob,并将其从存储中删除

如果是标准文件系统,我可以使用“上次访问时间”来指示上次使用文件的时间。然而,我似乎找不到blob的类似属性来确定最后的访问时间

那么,有没有人遇到过这种情况,实现这一点的最佳方式是什么? 还是我太担心这件事了

如有任何反馈或建议,我们将不胜感激


高级版谢谢。

您可以使用block和page blob Properties.lastModifiedUC获取上次修改的日期。对于页面或块blob,您需要使用GetBlockBlobReference或GetPageBlobReference API以及FetchAttributes()来获取blob引用,然后可以查找LastModifiedUtc

例如,对于Block blob,下面是代码片段:

CloudBlockBlob blockBlob = container_name.GetBlockBlobReference(uri.ToString());
blockBlob.FetchAttributes();
// blockBlob.Properties.LastModifiedUtc will return the last modified date for the blob.

我只能看到两种处理方法:

  • 将blob的访问权限放在前面,以便它们必须点击服务才能访问 获取带有SAS签名的blob URL。这样你就可以数数了 监视正在访问的blob。移除旧的斑点 一段时间后,低/无访问权限。这需要关闭 公开访问,这样人们就不能绕过您的SAS签名
  • 打开存储分析并监视GET请求。你会的 必须解析一个月内的所有GET访问,例如($logs每小时更新一次)和groupby 资源。如果你把它自动化,就不会太可怕了。 这将为您提供一个已使用的所有资源的列表 访问

  • 如果您正在使用Blob存储,那么遵循Gaurav建议的方法是您的最佳选择。有关入门文档,请参见此处:

    请注意,我们的.NET客户端库确实支持解析日志文件-您可以在我们的客户端库单元测试中看到这方面的演示:


    现在,通过Azure Blob存储对生命周期管理的支持,这一点更加简单明了

    编辑:如前所述,Blob存储生命周期管理只允许根据上次修改日期而不是上次访问日期设置规则

    Azure Blob存储生命周期管理提供了丰富的、基于规则的 GPv2和Blob存储帐户的策略。使用策略 将数据转换到适当的访问层,或在 数据生命周期的结束

    生命周期管理策略允许您:

    • 将Blob转换到较冷的存储层(热到冷、热到归档或冷到归档),以优化性能和成本
    • 在Blob的生命周期结束时删除Blob
    • 定义每天在存储帐户级别运行一次的规则将规则应用于容器或blob的子集(使用前缀作为筛选器)

    该功能现在可通过法国中部、加拿大东部和加拿大中部的生命周期管理获得


    更多详细信息

    lastmodifieddate与lastaccesstime不同。所以我不能真正使用它。正如这里所描述的,最后一次访问blob可能不可用。如果你能添加你自己的元数据并维护到你的blob中,你一定能实现它。实现这一点有一个相当复杂的方法。如果您在您的存储帐户上启用存储分析,然后通过日志(在$logs blob容器中提供)进行解析,以查找blob上次被访问的时间。Azure生命周期管理只能基于“上次修改”,而不是如所质疑的“上次访问时间”。