默认情况下,应用引擎为每个字段定义内置索引。我没有创造它们,我也不想要它们。
我的实际实体只消耗159MB,但索引消耗额外的680MB。这太疯狂了。我只会对这些实体进行密钥查询,所以我根本不需要任何索引。我该如何删除这些?
编辑:输出vacuum_indexes
:
Found 0 unused indexes on the server.
Details:
No indexes were deleted.
vacuum_indexes completed successfully.
答案 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个索引条目 - 一个按降序递增另一个。