从控制台查看和修改Google数据存储区索引

时间:2014-05-25 18:12:28

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

是否可以使用Google Developer Console在我的项目的Google Cloud Datastore上查看和创建索引?

如果没有,我如何通过另一条路线创建一个?

一些上下文:我正在编写一个简单的Android应用程序,通过自定义“Mobile Backend Starter / MBS”来存储/检索云数据存储中的数据(在开发控制台中创建新项目时,我们总是被邀请部署后端)。

我现在正处于我在Android客户端中指定的查询/过滤器返回“503”错误,指出需要索引。我想这是因为我在查询中使用了“大于”的过滤器。

那么如何添加一个呢?或者我是否必须编辑后端部署包才能执行此操作?如果是这样,那我怎么能这样做,例如查看MBS后端部署到的文件夹?我假设MBS是一个零配置后端 - 我们只需要编写客户端,但似乎基本的查询操作需要添加一个索引,所以情况并非如此?我被建议在我正在向CloudBackend调用的list()调用抛出的IOException中的某处添加一个xml片段:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 503 Service Unavailable
 {
    "code": 503,
   "errors": [
 {
  "domain": "global",
  "message": "com.google.appengine.api.datastore.DatastoreNeedIndexException: no matching index found.\nThe suggested index for this query is:\n    <datastore-index kind=\"DB\" ancestor=\"false\" source=\"manual\">\n        <property name=\"_createdBy\" direction=\"asc\"/>\n        <property name=\"originatingDeviceID\" direction=\"asc\"/>\n        <property name=\"LastUpdatedOn\" direction=\"asc\"/>\n    </datastore-index>\n\n",
  "reason": "backendError"
}

... SNIP

2 个答案:

答案 0 :(得分:1)

通常,在测试应用程序时会自动生成大多数索引。如果没有发生,您需要手动配置datastore-indexes.xml文件。您可以在Java Datastore Index Configuration了解更多相关信息。

答案 1 :(得分:0)

感谢所有人的意见 - 为了将来的参考,这里的解决方案对于像我这样的用户来说只是部署MBS而且还没有想要与服务器端代码进行交互,而这些代码应该只是部署并开始。

首先,您通过Google App Engine SDK工具下载当前部署的后端:

 appcfg.cmd --application=my-project-name download_app .

然后在WEB-INF / datastore-indexes.xml中,我们看到在vanilla MBS配置中已禁用索引的自动生成。

<?xml version="1.0" encoding="utf-8"?>
<datastore-indexes autoGenerate="false">
    <datastore-index kind="_CloudMessages" ancestor="false">
       <property name="topicId" direction="asc"/>
       <property name="_createdAt" direction="desc"/>
    </datastore-index>
</datastore-indexes>

这就是我的索引没有建成的原因。然后粘贴建议的索引,幸运的是,它包含在Java IOException消息体中,并通过以下方式将其上传回Google:

 appcfg.cmd --application=my-project-name update_indexes .

对于Google控制台而言,拥有一些控制台功能来管理索引非常有用,因为它必须添加/删除/编辑实体,但似乎您只能检查它们。