为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
jeck猫 2021-11-08 18:22:59
当使用 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)作为后续 - 我猜这应该几乎永远不会失败,因为它几乎永远不会在同一个不完整键上运行?
查看完整描述

1 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

您不需要将 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 个)。


查看完整回答
反对 回复 2021-11-08
  • 1 回答
  • 0 关注
  • 199 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信