【问题标题】:How to remove built-in datastore indexes如何删除内置数据存储索引
【发布时间】:2012-06-25 23:45:20
【问题描述】:

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

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

编辑vacuum_indexes的输出:

Found 0 unused indexes on the server.

Details:
No indexes were deleted.

vacuum_indexes completed successfully.

【问题讨论】:

  • 这是开发服务器还是生产服务器?

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


【解决方案1】:

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

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

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

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 docummentation 上阅读有关最后一条命令的更多信息。

【讨论】:

【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 2011-06-04
    • 1970-01-01
    • 2019-01-18
    相关资源
    最近更新 更多