Google app engine 将索引添加到已存在于Google App Engine数据存储中的实体属性

Google app engine 将索引添加到已存在于Google App Engine数据存储中的实体属性,google-app-engine,google-cloud-datastore,Google App Engine,Google Cloud Datastore,我知道您应该向实体模型中的所有属性添加@Index来添加索引,但是如果您忘记了,并且数据存储中已经有实体的实时写入,该怎么办 有没有办法通过开发者控制台或其他方式手动向所有这些属性添加索引 我发现,如果将@Index添加到实体中并重新部署该项目,则该实体的所有新写入都将对该属性进行索引。但是,该属性的所有现有写入操作都不会被索引(因此是不可检索的)。当实体写入数据存储时,索引将被更新。为了确保对现有实体的索引进行更新,一种方法是读取每个实体并立即将其写回——当然成本很高,但分批执行(例如在计划任

我知道您应该向实体模型中的所有属性添加@Index来添加索引,但是如果您忘记了,并且数据存储中已经有实体的实时写入,该怎么办

有没有办法通过开发者控制台或其他方式手动向所有这些属性添加索引


我发现,如果将@Index添加到实体中并重新部署该项目,则该实体的所有新写入都将对该属性进行索引。但是,该属性的所有现有写入操作都不会被索引(因此是不可检索的)。

当实体写入数据存储时,索引将被更新。为了确保对现有实体的索引进行更新,一种方法是读取每个实体并立即将其写回——当然成本很高,但分批执行(例如在计划任务中)是可行的

你没有提到你正在使用哪种语言——我知道它不是Python,因为那里没有
@index
。在Python中,当我用新索引更新index.yaml并上传它时,AppEngine会为我重新编制索引(这可能需要相当长的时间,但它确实“自行完成”)


无论您喜欢哪种语言,您都可以利用Python运行时的这一功能,因为App Engine允许应用程序的各种模块(共享同一数据存储)使用不同的语言——只需在Python中添加一个模块,就可以在Python的
ndb
中复制您的模型,并使用index.yaml,就像使用纯Python应用程序一样。。。这应该可以很好地工作,唯一的困难是“挖掘”数据存储顶部使用的任何层(objectify或其他),以Python术语对模型进行反向工程。

afaik java还可以自动(在24小时内)重新编制现有实体的索引@ZigMandel这是新的,在哪里有文档记录?这也是免费的吗?@marcadian,在obliquely上记录为“如果在上载应用程序时启用了自动索引配置,AppCfg将同时使用datastore-indexes.xml和datastore-indexes-auto.xml来确定需要为生产中的应用程序构建哪些索引。”。但是,这并没有提到24小时时间,也没有涉及计费问题,所以我将在这两个方面听从ZG Mandel的意见。@AlexMartelli我知道这一部分,但我不知道自动重新索引,如果只在java中发生,这似乎很奇怪,因为底层数据存储不依赖于平台。这个答案是错误的。多属性索引在index.yaml/datastore-indexes.xml中定义(您可以使用其中任何一个),并会自动更新,但单属性索引不会。