考虑以下两种选择。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的密钥,并且需要在后台查询数据存储。
森林海
TA贡献2011条经验 获得超2个赞
我认为Peter给出了一个很好的答案,但是这里涉及两件事:
您似乎在问,从ID生成密钥并存储ID以节省存储成本还是存储实际密钥,是否更便宜。从ID生成密钥是一个非常简单的哈希,几乎可以忽略不计-您可能还要担心很多重要的事情。我不能说它要花多少钱,但是您可以做一个非常简单的实验并循环数十万次并估算成本。它可能比存储便宜,但我怀疑它是否非常重要。
困难的部分是生成唯一ID,您没有在问题中包含该ID。为此,获取保证唯一的数据存储区密钥可能会更容易。
慕桂英4014372
TA贡献1871条经验 获得超13个赞
如前所述,创建密钥几乎不花钱;因此,您将选择存储ID,这样可以节省一些存储成本。存储Key的好处是,将其键入到id实际指向的内容,这样可以防止代码中可能出现的错误。例如,如果您存储ID,则可以检索该ID,然后为代码中的错误实体创建密钥,如果您存储密钥,则无需担心该错误。而且,以数据存储为代价,存储ID和密钥的区别可能可以忽略不计,您花在思考它上的时间更有价值。
- 3 回答
- 0 关注
- 202 浏览
添加回答
举报
0/150
提交
取消