【问题标题】:How to change google cloud datastore kind name ?如何更改谷歌云数据存储类型名称?
【发布时间】:2018-02-16 01:22:29
【问题描述】:

我们使用google cloud datastore 来存储数据,不幸的是最初没有遵循命名kinds 的命名约定,现在我们想要更改数据存储区中现有类型的名称

我们已经积累了大量数据,并且生成这些数据涉及大量计算,因此再次填充完整数据只是为了重命名一种类型不是我们的选择。

已尝试找到它,但没有运气。那么有什么我错过的东西可以帮助实现它吗?

【问题讨论】:

    标签: google-cloud-platform google-cloud-datastore


    【解决方案1】:

    您不能在数据存储中重命名kind,因为种类名称嵌入在数据存储中每个元素的键中。你将不得不写一个 脚本将所有数据迁移到新的kind

    【讨论】:

    【解决方案2】:

    如果您只是想保持代码整洁,则可以将代码中的模型别名作为一种简单的解决方案。不过,在使用 GQL 时,您仍然需要通过原始名称来引用您的种类。

    正如@Akash Dathan 所说,您可以通过编写脚本来迁移数据。我将提供更多细节:

    GQL 不能用于此类迁移。请参阅以下文档(针对 Python),其中指出“GQL 是一种类似 SQL 的语言,用于检索实体和键”:

    https://cloud.google.com/appengine/docs/standard/python/datastore/gqlreference?csw=1

    Python

    对于一个实际的 Python 示例,请参考幻灯片 29 '重命名模型:

    https://www.slideshare.net/RyanMorlok/data-migrations-in-the-app-engine-datastore

    Java

    如果您使用 Java,您可能想查看 Java DataStore API -

    https://cloud.google.com/appengine/docs/standard/java/datastore/api-overview#Java_Kinds_keys_and_identifiers

    如果您的实体管理是使用某种通用实现的工作单元模式完成的(这是相当普遍的),那么使用 Java DataStore API 的基本迁移代码可能如下所示:

        List<MyKind1> allKind1Entities = myDataService.GetAll(MyKind1);
    
        for (MyKind1 myKind1: allKind1Entities) {
    
            MyKind2 myKind2entity = MyKind1.MapToMyKind2(myKind1);
            try {
                long myKind2entity Id = myDataService.Add(myKind2entity);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        myDataService.PurgeAll(MyKind1);
    

    如果您通过另一个包含链接实体的“种类”在实体之间进行任何手动链接,那么它会变得更加复杂,因为您需要更新您的 ID 引用(因为新的 myKind2 实体都将具有新的id)

    在生产中更新架构

    如果您的应用在应用引擎下运行并且您需要实时更新架构,您可以在此处找到有关在代码中更新模型时的注意事项的更多详细信息 - https://cloud.google.com/appengine/articles/update_schema

    这是来自 Google 的一个非常好的 YouTube,介绍如何在不停机的情况下进行实时迁移 - https://youtube.com/watch?v=qFU5aTT1Eqk

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-04
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-11
      • 1970-01-01
      相关资源
      最近更新 更多