4

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

我的实际实体只消耗了 159MB,但索引又消耗了 680MB。我只会对这些实体进行键查询,所以我根本不需要任何索引。我怎样才能删除这些?

编辑:输出vacuum_indexes

Found 0 unused indexes on the server.

Details:
No indexes were deleted.

vacuum_indexes completed successfully.
4

2 回答 2

7

您不能删除内置索引。它们是内置的:)

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

要使属性不被索引,请在 de 属性声明中添加一个参数,如下所示:

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

这样,appengine 将停止为该特定属性使用/创建索引。下次运行 SDK 控制台时,index.yaml 文件将自动更新。

您需要做的最后一件事是执行appcfg.py vacuum_indexes myapp/。阅读有关Appengine SDK 文档中最后一条命令的更多信息。

于 2012-06-26T00:55:04.727 回答
4

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

于 2012-06-26T06:06:50.820 回答