从Blobstore中删除孤立blob的最有效方法是什么?
应用功能&范围:
可能但效率低下的解决方案:
有没有更好的方法呢?我搜索了类似的帖子,但我找不到任何提及有效的解决方案。
提前致谢!
答案 0 :(得分:3)
感谢您的评论。但是,我很了解这些解决方案,我发现它们效率太低。查询数千个被标记为“未使用”的条目并不理想。
我相信我已经想出了一个更好的方法,并希望听到你的想法:
保存blob后,会立即创建一个延迟任务,以便在一小时内删除相同的blob。如果创建并保存帖子,则删除延迟任务,因此不会在一小时内删除blob。
我相信这可以让您免于每小时查询数千个条目。
您对此解决方案有何看法?
答案 1 :(得分:1)
blob也有文件名。发布后,您可以删除所有具有相同文件名的旧blob。要删除的重复项必须具有相同的所有者或没有所有者。您还必须删除没有所有者的blob。
以下是上传后删除重复项的示例。
blobs = blobstore.BlobInfo.gql("WHERE filename = '%s'" %(filename))
for blob in blobs :
if blob.key() != userdata.blob_ref.key() : blob.delete()
要清理“未使用”blob,您可以在每次上传后安排任务,在一小时后运行。
答案 2 :(得分:1)
您可以创建将blob链接到用户的实体。当用户上传blob时,您会立即创建一个包含blob id,用户ID(或post id)和创建时间的新记录。当用户提交帖子时,您向该实体添加一个标志,表示使用了一个blob。
现在你的cron作业需要获取这种标志不等于“true”的所有实体,并且创建时间超过一小时。此外,您只能获取密钥,这是一个更有效的操作,可以获取完整的实体。
答案 3 :(得分:0)
使用草稿!每次上传后保存为草稿。然后不要做清洁!让用户自己选择消灭。
如果您计划使用Facebook风格的帖子,请使用草稿或将其设为私有。为什么要删除用户的数据?