【问题标题】:How can I remove unused indexes in Google Application Engine?如何删除 Google Application Engine 中未使用的索引?
【发布时间】:2010-10-23 06:23:07
【问题描述】:

我为我的 GAE 应用程序添加了 accidentally added 一个新过滤器。索引的状态现在是“服务” - 但是我根本不需要该索引,我想删除。我该怎么做?

【问题讨论】:

  • 如果你能用浏览器控制台删除这些就太好了 =(

标签: google-app-engine indexing


【解决方案1】:

记录在here。希望对您有所帮助。

删除未使用的索引

当您更改或删除索引时 从 index.yaml 中,原始索引为 未从 App Engine 中删除 自动地。这给你 离开旧版本的机会 在新索引时运行的应用程序 正在建造,或恢复到 如果出现问题,请立即使用旧版本 发现有较新的版本。

当您确定旧索引是 不再需要,您可以删除它们 从 App Engine 使用以下 命令:

appcfg.py vacuum_indexes myapp/

此命令删除本地版本 index.yaml 中未提及的应用的所有索引。

【讨论】:

  • @fuentesjr:我冒昧地将引用的文本/代码添加到您的帖子中。
  • 此接缝仅适用于 Python 版本 :-( 使用 JavaSDK 时,vacuum_indexes 参数丢失。使用 appcfg.py 命令也没有用,因为 Java 不会将索引存储在 index .yaml 这意味着您必须自己创建此文件并尝试按照您在 Javas xml 中定义它们的方式键入所有索引。
  • 如果我从 index.yaml 中删除一个索引,GAE 会继续创建这个索引还是我必须使用上述过程删除它?
【解决方案2】:

对于 GAE / Java,文档包括 this information:

删除未使用的索引

...

当您确定不再需要旧索引时,您可以 使用 Vacuum_indexes 操作从 App Engine 中删除它们:

./appengine-java-sdk/bin/appcfg.sh vacuum_indexes myapp/war

此命令删除应用程序中未提及的所有索引 datastore-indexes.xml 的本地版本和 生成/datastore-indexes-auto.xml。

【讨论】:

  • 警告:对我来说,它似乎只考虑了 datastore-indexes-auto.xml。这意味着它提供删除 datastore-indexes.xml 中提到的声称不再使用的索引(当它们被使用时)。但除此之外,它在删除我的错误索引方面对我有用,而且我不必像其他答案所建议的那样创建任何 yaml 文件。
  • 我在 Windows 上,并且成功使用了“appcfg.cmd Vacuum_indexes c:\myappdir\war”。它启动了我的 Web 浏览器来进行身份验证。必须粘贴代码。
  • 如果您收到“访问代码无效或 OAuth 令牌已撤销。详细信息:invalid_grant”类型的错误,请尝试删除用户目录中的“.appcfg_oauth2_tokens_java”文件。
【解决方案3】:

Windows Google AppEngine Java 中,我们必须使用 appcfg.cmd 命令来删除已部署应用程序的未使用索引

语法:

appengine-java-sdk-path\bin\appcfg.cmd Vacuum_indexes project-root-path\poject-name\war\

【讨论】:

    【解决方案4】:

    截至 2019 年 2 月,现在是:

    gcloud datastore indexes cleanup index.yaml
    

    【讨论】:

      【解决方案5】:

      对于 gae-java,正如 JochenJung 所提到的,“vacuum_indexes”工具可以工作,但您必须通过以下方式模拟 python 项目:

      请注意,真空工具似乎仅在指向 *.appspot.com 时才有效,而不是本地开发者。环境。

      • 为您的应用创建 app.yaml 并将其放在您的 /myapp/ 根目录中,至少:
      
          application: myproj
          version: 4
          runtime: python
          api_version: 1
      

      其中“version”是您应用的版本,“myproj”是您项目的 GAE 名称。

      • 创建一个 index.yaml 并将其放在同一个根目录中。事实证明,该工具将为您删除的每个索引提供是/否确认,而不是费力地将您要保留的索引的索引信息放入该文件,因此仅指示 ALL 更简单索引应该被删除,并使用确认来保留您想要保留的索引。
      
      indexes:
      
      # AUTOGENERATED
      

      然后运行如上图所示的命令,

      
        /appcfg.py vacuum_indexes /path/to/myproj/
      

      【讨论】:

      • 我正在使用 Java GAE。这就像一个魅力。但是,我确实必须将app.yaml 更新为:application: myproj version: 4 runtime: python api_version: 1 handlers: -url: / script: home.py,因为在运行vaccum_indexes 时出现错误No UrlMap entires found in application configuration。另外,为了清楚起见,app.yamlindex.yaml 文件都应该放在你的war/WEB-INF 文件夹中。例如,要运行的命令是:appcfg.py vacuum_indexes /path/to/myproj/WEB-INF
      【解决方案6】:

      如果您使用的是 ma​​ven mvn appengine:vacuum_indexes。不用mvn appengine:update,命令更新远程服务器。

      maven 命令的完整列表here

      【讨论】:

        【解决方案7】:

        在使用 Java 的 Windows 上,这个命令对我有用:

        appcfg.cmd vacuum_indexes C:\Users\Name\AndroidStudioProjects\Project\backend\src\main\webapp\
        

        注意:确保您在webapp 文件夹中有一个datastore-indexes.xml(这些索引将被保留)。

        【讨论】:

          【解决方案8】:

          使用当前版本的 gcloud,您可以这样做:

          gcloud datastore cleanup-indexes index.yaml
          

          这比调用 appcfg.cmd [...] 更直观。

          【讨论】:

            【解决方案9】:

            gcloud datastore cleanup-indexes /path/to/file/index.yaml

            此命令不再有效

            gcloud datastore indexes cleanup /path/to/index.yaml

            这是新命令

            您应该在google cloud console 中运行它们。通常您可以使用google cloud console 中的file upload 功能上传index.yaml 文件。你的文件直接转到_admin 你可以cd 去那里打电话,

            gcloud datastore indexes cleanup index.yaml

            提示

            如果您在 java 项目 中使用datastore,您将使用datastore-indexes.xml 而不是index.yaml。如果您不知道在哪里查找,您可能很难找到 index.yaml 文件。

            您只需在 IDE 中查看 deploy console 即可找到 index.yaml 文件的路径。

            【讨论】:

            • 对于 Java 项目:它们不维护 index.yaml 文件,gcloud datastore indexes cleanup 不处理 datastore-indexes.xml 文件。为了弥补这一差距,我将 datastore-indexes.xml 转换为 index.yaml 使用:gcloud beta app migrate-config datastore-indexes-xml-to-yaml <path to datastore-indexes.xml> 这不会将 Java 项目切换为使用 index.yaml,即在尝试清理数据存储索引之前需要重复
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多