【问题标题】:How can I delete the automatic Indexes in App Engine?如何删除 App Engine 中的自动索引?
【发布时间】:2011-11-19 06:08:58
【问题描述】:

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

我将 indexed = False 添加到我所有对象的属性中(我并不是每个人都在重要的地方使用查询):

someproperty = db.StringProperty(indexed = False)

对于要取消索引的 实体,我还需要做些什么吗?我是否需要增加应用的版本 ID?

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

【问题讨论】:

  • 如果您获得不需要的索引,您可能需要检查您的数据模型和控制器。如果您的代码中有最好的结构,那么您可以避免出现问题。
  • @Nicke 我同意你的观点,这是长期目标。这只是我可以很容易地做的事情,以便在短期内取得不错的进步。

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


【解决方案1】:

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

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

【讨论】:

  • 我在生产服务器上看到了很大的改进(查看Datastore Index Write Ops),但它在开发服务器上的什么位置?我找到的最接近的东西是Datastore Statistics,但这并没有太大帮助
  • 由于我无法理解的原因,GAE 团队决定只有开发服务器会显示此值。
  • 但这就是我要问的。我没有在开发服务器上看到这个(就像在我的本地机器上一样),只有生产(就像在谷歌托管环境中一样)
  • @smith324 您在生产服务器的哪个位置看到:“Datastore Index Write Op”?
  • 在配额详情页面上。我认为它是 App Engine 离开预览版后的新版本,之前我不记得了。
【解决方案2】:

要摆脱现有的自动索引,您必须检索每个实体并使用 indexed = False 属性重新放置它。

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

【讨论】:

  • 但是,既然您不使用旧索引,是否有任何理由努力摆脱旧索引?看起来你应该可以不用管它,除非它正在使用你需要恢复的大量空间。
  • 我认为存储空间是您在索引过时的情况下唯一支付的费用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-02
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
  • 2016-11-05
相关资源
最近更新 更多