将 ID 添加到数据存储实体的最佳实践?

当使用 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)

作为后续 - 我猜这应该几乎永远不会失败,因为它几乎永远不会在同一个不完整键上运行?


jeck猫
浏览 200回答 1
1回答

函数式编程

您不需要将 MyStruct 两次放入 DB - 这是不必要的开销。作为实体的一部分存储的密钥,可以在需要时检索。关于如何存储实体并将其 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 个)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go