什么是最有效的方式删除孤儿的气泡从一个blobs商店?
应用程序功能和作用域:
可能的但效率低下的解决方案:
有什么更好的方法吗?我已经搜索过类似的帖子,但我找不到任何提到的有效解决方案。
提前感谢!
发布于 2012-11-06 08:20:47
谢谢你的评论。然而,我很好地理解了这些解决方案,我发现它们效率太低。查询数千条标记为“未使用”的条目并不理想。
我相信我想出了一个更好的办法,我想听听你对此的看法:
保存blob时,立即创建一个延迟任务,以便在一小时内删除相同的blob。如果创建并保存了post,则延迟任务将被删除,因此blob不会在一小时内被删除。
我相信这可以使您不必每小时查询数千条条目。
你对这个解决方案有什么想法?
发布于 2012-11-01 23:08:49
blob也有一个文件名。在发布之后,您可以删除所有具有相同文件名的旧blobs。要删除的副本必须具有相同的所有者或没有所有者。您还必须删除没有所有者的blobs。
下面是一个在上传之后删除重复项的示例。
blobs = blobstore.BlobInfo.gql("WHERE filename = '%s'" %(filename))
for blob in blobs :
if blob.key() != userdata.blob_ref.key() : blob.delete()若要清除“未使用”气泡,您可以在每次上传后安排任务,并在一小时后运行。
发布于 2012-11-02 00:06:04
您可以创建一个将blobs链接到用户的实体。当用户上传blob时,立即使用blob id、user id (或post id)和创建的时间创建一个新记录。当用户提交帖子时,可以向该实体添加一个标志,指示使用了blob。
现在,您的cron作业需要获取所有这种类型的实体,在这些实体中,一个标志不等于"true“,而创建的时间在一个小时前就多了。此外,您只能获取键,这是一种更有效的操作,可以获取完整的实体。
https://stackoverflow.com/questions/13186494
复制相似问题