【问题标题】:Avoid default index but keep explicitly defined index in AppEngine?避免使用默认索引但在 AppEngine 中保留明确定义的索引?
【发布时间】:2012-01-26 17:02:25
【问题描述】:

我有一些只在需要复合索引的查询中引用的属性。 AppEngine 将所有索引属性写入它们自己的特殊索引,这需要每个属性进行 2 次额外的写入操作。

有没有办法指定属性不在其自己的索引中编制索引,但仍用于我的复合索引?

例如,我的实体可能是具有 namegroup 属性的 Person。我的代码中唯一的查询是select * from Person where group = <group> and name > <name>,所以我真正需要的唯一索引是组升序和名称升序。但现在 AppEngine 还在name 上创建索引,在group 上创建索引,这使写入每个实体所需的写入操作数增加了三倍!

我可以从文档中看到如何防止属性被用于索引,但我想只为少数索引(默认索引)关闭索引。

【问题讨论】:

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


    【解决方案1】:

    根据我目前的理解,您可以同时禁用对属性的索引(包括复合索引),或者您坚持使用所有索引(自动索引 + index.yaml 中的复合索引)。

    在 GAE google 小组中对此进行了一些讨论,并提出了一个功能请求来完全按照您的建议进行操作,但我找不到它。我回家后会更新答案并进行更多搜索。

    【讨论】:

    • 啊,我发现了至少一个相关细节问题:code.google.com/p/googleappengine/issues/detail?id=4231
    • 这就是我要找的那个!完全同意这是一种痛苦。在我正在处理的一个应用程序中,一个 put() 生成了 32 次写入,但我只对 1 个查询使用了非复合索引,其他一切都是复合的。
    猜你喜欢
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    相关资源
    最近更新 更多