首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除Blobstore孤儿

删除Blobstore孤儿
EN

Stack Overflow用户
提问于 2012-11-01 22:29:21
回答 4查看 1K关注 0票数 2

什么是最有效的方式删除孤儿的气泡从一个blobs商店?

应用程序功能和作用域:

  • 登录用户希望创建一个包含一些普通数据存储字段(例如名称、姓氏、注释)和blobs (图像)的帖子。
  • 此外,在通过POST 发送数据重新发送之前,blobs被异步地上载。
    • 这给孤儿留下了很好的机会,例如,用户可能会上传图像,但由于某种原因无法完成表单。如果在发送其余的数据之前不使用blobs的异步上传,这个问题将被最小化,然而,这个问题仍然存在于较小的范围内。

可能的但效率低下的解决方案:

  • 无论何时完成一个帖子(即发送其余的数据),您都可以将blob键添加到“二手blob”表中。然后,您可以经常运行cron,并将所有的blobs与“二手blobs”表进行比较。一个多小时前上传但仍“未使用”的内容将被删除。
    • 我的理解是,运行一个潜在的几十万blob键列表,并将其与另一个由数十万个“二手blob键”组成的表进行比较是非常低效的。

有什么更好的方法吗?我已经搜索过类似的帖子,但我找不到任何提到的有效解决方案。

提前感谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-06 08:20:47

谢谢你的评论。然而,我很好地理解了这些解决方案,我发现它们效率太低。查询数千条标记为“未使用”的条目并不理想。

我相信我想出了一个更好的办法,我想听听你对此的看法:

保存blob时,立即创建一个延迟任务,以便在一小时内删除相同的blob。如果创建并保存了post,则延迟任务将被删除,因此blob不会在一小时内被删除。

我相信这可以使您不必每小时查询数千条条目。

你对这个解决方案有什么想法?

票数 3
EN

Stack Overflow用户

发布于 2012-11-01 23:08:49

blob也有一个文件名。在发布之后,您可以删除所有具有相同文件名的旧blobs。要删除的副本必须具有相同的所有者或没有所有者。您还必须删除没有所有者的blobs。

下面是一个在上传之后删除重复项的示例。

代码语言:javascript
复制
blobs = blobstore.BlobInfo.gql("WHERE filename = '%s'" %(filename))
for blob in blobs :
    if blob.key() != userdata.blob_ref.key()  : blob.delete()

若要清除“未使用”气泡,您可以在每次上传后安排任务,并在一小时后运行。

票数 1
EN

Stack Overflow用户

发布于 2012-11-02 00:06:04

您可以创建一个将blobs链接到用户的实体。当用户上传blob时,立即使用blob id、user id (或post id)和创建的时间创建一个新记录。当用户提交帖子时,可以向该实体添加一个标志,指示使用了blob。

现在,您的cron作业需要获取所有这种类型的实体,在这些实体中,一个标志不等于"true“,而创建的时间在一个小时前就多了。此外,您只能获取键,这是一种更有效的操作,可以获取完整的实体。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13186494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档