BlobFileIndex填满了Datastore配额

7
我在我的应用程序中将对象序列化到Blobstore中,每当它们发生更改时就会删除并重新创建它们。我知道这不是最好的方法,但我发现这是快速原型设计的好方法。
现在我正在使用Datastore,但是我有一个问题。我的Datastore配额已满! :) 我为此问题进行了大量搜索,但还是无济于事。
显然,对于每个Blob,__BlobInfo__和__BlobFileIndex__种类都会保存有关该Blob的信息。我的问题是,当我删除Blob时,在__BlobInfo__中的信息被删除,但在__BlobFileIndex__中的信息没有被删除。
我拼命尝试使用appcfg vacum_indexes,但是效果并不像预期的那样有帮助。
顺便说一下,我使用Java平台。
以下是我的问题:
1.如何清除未使用的BlobFileIndex条目?
2.处理此情况的正确方法是什么,以避免再次发生?
谢谢。
编辑:哇哦!我现在看到我无法删除这些不需要的索引
a)数据存储管理员不列出它们
b)手动删除代码抛出异常(java.lang.IllegalArgumentException: illegal key.path.element.type: BlobFileIndex)。由于以双下划线开头的实体是应用程序引擎保留实体,因此它不允许我删除它。谷歌的人们,我卡在这里 :)

我使用Python。我知道SDK中Blobstore的实现/仿真与GAE本身不同。在GAE中,您没有那些以__开头的额外种类,比如__BlobInfo__。 - voscausa
你现在是否将Blob存储在数据存储中?那么索引是什么意思呢?在GAE中,Blob属性不被索引,那么BlobFileIndex应该是什么? - fmt.Println.MKO
在数据存储查看器中运行“SELECT * FROM _____BlobFileIndex_____”会返回很多结果。 - Cigiller
@Cigiller。你非常正确。该查询提供了隐藏的种类。 - voscausa
@fmt.Println.MKO 不,我不会在数据存储中存储二进制大对象。App Engine 会将二进制大对象的元数据存储在数据存储中,这就是问题所在。 - Cigiller
2个回答

3

我已经做了。第20个抱怨的人是我 :) 我所寻求的是至少在修复之前的解决方法。 - Cigiller

0
我曾经遇到过这个问题,但是找到了解决方案:
对于任何试图以编程方式删除BlobFileIndex的人,可以这样做:
query = datastore.Query("__BlobFileIndex__",{'blob_key': a_blob_key}, keys_only=True)
    key = query.Get(1)
    key_y = key[0]
    datastore.Delete(key_y)

这对我不起作用。在删除时,我收到了错误消息:BadRequestError: 类型“__BlobFileIndex__”已被保留。 - new name

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接