如何删除内置数据存储区索引

时间:2012-06-25 23:45:20

标签: java google-app-engine google-cloud-datastore

默认情况下,应用引擎为每个字段定义内置索引。我没有创造它们,我也不想要它们。

我的实际实体只消耗159MB,但索引消耗额外的680MB。这太疯狂了。我只会对这些实体进行密钥查询,所以我根本不需要任何索引。我该如何删除这些?

编辑:输出vacuum_indexes

Found 0 unused indexes on the server.

Details:
No indexes were deleted.

vacuum_indexes completed successfully.

2 个答案:

答案 0 :(得分:7)

您无法删除内置索引。它们是内置的:)

您可以做的是减少应用模型使用的索引编号。默认情况下,每个属性都在AppEngine中编制索引。我想你真的是这个意思。

要使属性取消索引,请在de属性声明中添加一个param,如下所示:

class MyModel(db.Model):
    FirstName = db.StringProperty(Indexed=False)
    LastName = db.StringProperty(Indexed=False)
    ...

顺便说一句,appengine将停止使用/创建该特定属性的索引。下次运行SDK控制台时,indices.yaml文件将自动更新。

您需要做的最后一件事是执行appcfg.py vacuum_indexes myapp/。阅读Appengine SDK docummentation上最后一个命令的更多信息。

答案 1 :(得分:4)

使用低级Java API,您需要对所有不希望内置索引的属性使用setUnindexedProperty方法。 没有办法简单地改变一些definiton文件和吸尘以摆脱已经存在的索引条目。 删除这些内置索引条目(或创建新条目)的唯一方法是重写所有实体。但请注意,在一个实体上删除一个索引条目将计为针对您的配额的2个完整写入,因为这些实际上是2个索引条目 - 一个按降序递增另一个。