我在Google Compute Engine上部署了一个java Web应用程序。我正在使用Google Cloud Datastore来存储数据。我正在使用GQL查询构建器获取数据。只要涉及一个参数,我就可以从数据存储中检索数据。简单的查询,如:
"SELECT * FROM logintracker WHERE logdate='2017-10-25' "
对我来说很好。但是,如果我添加一些额外的参数,如:
"SELECT * FROM logintracker WHERE logdate='2017-10-25' ORDER By logtime DESC"
不行。我得到一个回复说数据存储区需要开发人员提供的索引文件。我做了一些研究,发现我需要在index.yaml文件中指定索引。这是我的index.yaml文件:
indexes:
- kind: logintracker
ancestor: no
properties:
- name: logtime
direction: desc
- name: logdate
这是我的问题。我应该在我的应用程序war文件中将index.yaml文件包含在哪里。或者是否有其他位置我需要直接在服务器上上传index.yaml文件 - 比如云存储?
答案 0 :(得分:1)
不是您的应用程序需要该信息,而是数据存储区本身。这就是为什么索引配置没有专门为应用程序配置,而是直接上传到GCP(自身或与应用程序一起,具体取决于应用程序类型)。
如果您正在使用数据存储模拟器,则该文件需要位于某个位置。来自About index.yaml:
index.yaml
位于<project-directory>/WEB-INF/
夹。默认情况下,包含的数据目录WEB-INF/appengine-generated/index.yaml
是~/.config/gcloud/emulators/datastore/.
有关其他详细信息,请参阅Cloud Datastore emulator project directories。
至于将文件上传到GCP(即更新实际的数据存储索引),来自The development workflow using the command-line tool:
以下是使用
gcloud
工具的典型工作流程:[...]
- 醇>
使用
create-indexes
命令上传生成的索引,并将路径传递到本地index.yaml
文件,如 以下示例:gcloud datastore create-indexes ~/.config/gcloud/emulators/datastore/WEB-INF/index.yaml
示例路径假设您尚未为其设置特定目录
data-dir
选项。如果您设置了特定目录, 修改路径以使用index.yaml
文件的路径。[...]
- 醇>
随着时间的推移,您可能不再使用某些索引。您可以从生产Cloud Datastore实例中删除未使用的索引 从本地
index.yaml
文件中删除它们然后调用cleanup-indexes
命令:gcloud datastore cleanup-indexes ~/.config/gcloud/emulators/datastore/WEB-INF/index.yaml
如果您为
data-dir
选项设置了特定目录, 修改示例中的路径以使用index.yaml
的路径 文件
如果您使用手动制作的index.yaml
文件,则需要在上述引号中提到的~/.config/gcloud/emulators/datastore/WEB-INF/index.yaml
命令中指定该文件的位置,而不是gcloud datastore
。