google-app-engine - 将 ID 添加到数据存储实体的最佳做法?

标签 google-app-engine go google-cloud-datastore

当使用 IncompleteKey 创建实体以便每条记录本身都是唯一的时,将键添加回记录以便它可以在创建时在结构中传递的最佳方法是什么?

例如,使用事务处理(未经测试的代码)是个好主意吗?

 err = datastore.RunInTransaction(c, func(c appengine.Context) error {
        incompleteKey := datastore.NewIncompleteKey(c, ENTITY_TYPE, nil)
        entityKey, err := datastore.Put(c, incompleteKey, &MyStruct)
        if(err != nil) {
            return err
        }

        MyStruct.SelfID = entityKey.IntID()
        _, err = datastore.Put(c, entityKey, &MyStruct)

        return err
    }, nil)

作为后续——我猜这应该几乎永远不会失败,因为它几乎永远不会对同一个 incompleteKey 进行操作?

最佳答案

您不需要将 MyStruct 放入数据库两次 - 这是不必要的开销。作为实体的一部分存储的 key ,可以在需要时检索。

文档中有一个关于如何存储实体并将其 ID 用作引用的很好示例:https://cloud.google.com/appengine/docs/go/datastore/entities#Go_Ancestor_paths

当您想要获取实体的键时,您可以使用以下方法来实现: https://cloud.google.com/appengine/docs/go/datastore/queries#Go_Retrieving_results -(已编辑)请注意示例中的键和结构是在 1 个操作中填充的。

如果您通过键查询一个实体,您已经知道它的 ID。

因此不需要将 ID 作为单独的属性。如果您想将它与实体一起传递给您的业务逻辑,您可以创建一个包装器 - 可以使用实体结构的 interface() 进行泛化,也可以使用强类型(每个实体结构 1 个)。

关于google-app-engine - 将 ID 添加到数据存储实体的最佳做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32764351/

相关文章:

google-cloud-platform - 具有Google Cloud功能的Google Cloud端点

google-cloud-datastore - 如何使用过滤器备份数据存储

google-app-engine - Java GAE maven配置问题?只是另一个验证错误

java - 在低级 API 中生成 id

c - 我正在将一个简单的 RNG 函数从 C 移植到 Go,结果不正确

go - pprof(对于 golang)不显示我的包的详细信息

google-app-engine - App Engine : Can I upload my local dev_appserver. 数据存储到实时数据存储?

java - 在 Google App Engine 中配置数据库

python - 谷歌应用程序引擎数据存储区唯一ID

amazon-web-services - 我的应用程序是否需要请求 ec2 实例上的角色来配置 session 或将其留空?