2011-11-18 34 views
2

所以我在App Engine上有一个活动的Python应用程序,它有太多的自动索引。我注意到大量的数据存储写入的实体数量很低,我相信这是原因。每个实体都有很多StringProperties,有些甚至有StringListProperties。如何删除App Engine中的自动索引?

我添加索引= False以我所有的对象的属性(我不是每次使用查询哪里,这将关系):

someproperty = db.StringProperty(indexed = False)

还有什么我需要新办要索引的实体?我是否需要增加应用的版本ID?

我需要运行appcfg.py vacuum_indexes .吗?

+0

如果您收到不需要的索引,可能需要查看数据模型和控制器。如果你的代码中有最好的结构,那么你可以避免出现问题。 –

+0

@Nicke我同意你的看法,那就是长远目标。这简直就是我可以轻松完成体面短期改善的一件事。 – smith324

回答

3

vacuum_indexes仅适用于index.yaml中定义的索引,对于自动索引,它足以设置indexed = False并上传新版本。

您可以在写入计数列中的开发服务器数据存储页面中看到索引为False的设置的影响。

+0

我在生产服务器上看到了很大的改进(查看'Datastore Index Write Ops'),但是它位于开发服务器上的位置?我发现的最接近的是'Datastore Statistics',但这不是太有帮助 – smith324

+0

由于我理解不到的原因,GAE团队决定只有开发者服务器才会显示这个值。 –

+0

但那就是我问的。我*不*在开发服务器(如本地计算机)上看到这一点,只有生产(如在谷歌托管环境中) – smith324

1

要摆脱现有的自动索引,您将不得不检索每个实体并重新将它与indexed = False属性重新组合。

如果你不这样做,那么自动索引将继续存在。但是,您创建的新实体不会被添加到这些索引中。

+0

但是,有没有什么理由通过这种努力来摆脱旧索引,现在你不使用它?看起来你应该能够保持独立,除非它使用了大量需要恢复的空间。 –

+0

我认为存储空间是您在付出过多索引的情况下唯一支付的费用。 –