在war文件中包含index.yaml文件的位置

时间:2017-11-11 23:25:39

标签: java google-cloud-datastore google-compute-engine war

我在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文件 - 比如云存储?

1 个答案:

答案 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工具的典型工作流程:

     

[...]

     
      
  1. 使用create-indexes命令上传生成的索引,并将路径传递到本地index.yaml文件,如   以下示例:

    gcloud datastore create-indexes ~/.config/gcloud/emulators/datastore/WEB-INF/index.yaml
    
         

    示例路径假设您尚未为其设置特定目录   data-dir选项。如果您设置了特定目录,   修改路径以使用index.yaml文件的路径。

  2.         

    [...]

         
        
    1. 随着时间的推移,您可能不再使用某些索引。您可以从生产Cloud Datastore实例中删除未使用的索引   从本地index.yaml文件中删除它们然后调用   cleanup-indexes命令:

      gcloud datastore cleanup-indexes ~/.config/gcloud/emulators/datastore/WEB-INF/index.yaml
      
           

      如果您为data-dir选项设置了特定目录,   修改示例中的路径以使用index.yaml的路径   文件

    2.   

如果您使用手动制作的index.yaml文件,则需要在上述引号中提到的~/.config/gcloud/emulators/datastore/WEB-INF/index.yaml命令中指定该文件的位置,而不是gcloud datastore