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

创建数据存储区的成本。密钥:将密钥存储在结构中,而不存储ID和从数据存储区中获取数据

创建数据存储区的成本。密钥:将密钥存储在结构中,而不存储ID和从数据存储区中获取数据

Go
有只小跳蛙 2021-05-05 17:26:59
考虑以下两种选择。A)将密钥存储在结构中。type Point struct {    Place *datastore.Key    Lat   float64    Lon   float64}然后使用密钥获取:place := new(Place)if err := datastore.Get(c, k, point.Place); err != nil {    return err} B)存储IDtype Point struct {    Place int64    Lat   float64    Lon   float64}然后在创建密钥后获取。k := datastore.NewKey(c, "Place", "", point.Place, nil)place := new(Place)if err := datastore.Get(c, k, place); err != nil {    return err} 存储密钥而不是ID会占用更多空间。为了进行权衡,最好了解一下创建密钥需要多少资源。换句话说,创建密钥真的便宜吗,还是一次创建并存储它更好?使用单个键,可能没什么大不了,但是假设我获取了一个点列表,并且对于每个点,我都希望检索该位置(即,遍历这些点以构建键数组,并获取它们)。编辑:我不是在考虑在这里分配ID或键,而只是在使用它们(即所有点和位置都已在数据存储区中,问题是是否存储ID或整个键)。
查看完整描述

3 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

密钥基本上只是一组属性的包装:种类,ID /名称,父密钥,名称空间。

因此,根据种类和ID创建密钥不会产生任何费用,因为这是本地操作(不需要数据存储区)。

OTOH,密钥分配确实要花费成本,因为这会创建具有唯一ID的密钥,并且需要在后台查询数据存储。


查看完整回答
反对 回复 2021-05-17
?
森林海

TA贡献2011条经验 获得超2个赞

我认为Peter给出了一个很好的答案,但是这里涉及两件事:

  1. 您似乎在问,从ID生成密钥并存储ID以节省存储成本还是存储实际密钥,是否更便宜。从ID生成密钥是一个非常简单的哈希,几乎可以忽略不计-您可能还要担心很多重要的事情。我不能说它要花多少钱,但是您可以做一个非常简单的实验并循环数十万次并估算成本。它可能比存储便宜,但我怀疑它是否非常重要。

  2. 困难的部分是生成唯一ID,您没有在问题中包含该ID。为此,获取保证唯一的数据存储区密钥可能会更容易。


查看完整回答
反对 回复 2021-05-17
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

如前所述,创建密钥几乎不花钱;因此,您将选择存储ID,这样可以节省一些存储成本。存储Key的好处是,将其键入到id实际指向的内容,这样可以防止代码中可能出现的错误。例如,如果您存储ID,则可以检索该ID,然后为代码中的错误实体创建密钥,如果您存储密钥,则无需担心该错误。而且,以数据存储为代价,存储ID和密钥的区别可能可以忽略不计,您花在思考它上的时间更有价值。


查看完整回答
反对 回复 2021-05-17
  • 3 回答
  • 0 关注
  • 202 浏览
慕课专栏
更多

添加回答

举报

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