考虑以下两种选择。
A) 将 key 存储在结构中。
type Point struct {
Place *datastore.Key
Lat float64
Lon float64
}
然后使用 key 获取:
place := new(Place)
if err := datastore.Get(c, k, point.Place); err != nil {
return err
}
B) 存储 id
type Point struct {
Place int64
Lat float64
Lon float64
}
然后在创建 key 后获取。
k := datastore.NewKey(c, "Place", "", point.Place, nil)
place := new(Place)
if err := datastore.Get(c, k, place); err != nil {
return err
}
存储 key 而不是 id 会占用更多空间。为了看到权衡,最好了解创建 key 需要多少资源。换句话说,创建 key 真的很便宜,还是创建一次并存储它更好?
使用单个键,这可能无关紧要,但假设我获取了一个点列表,并且对于每个点我都想检索位置(即遍历这些点以构建一个键数组,并获取它们)。
编辑:我不考虑在这里分配 ID 或 key ,只是使用它们(即所有点和地点都已经在数据存储中,问题只是存储 ID 还是整个 key )。
前辈, 亚历山大英灵
最佳答案
键基本上只是一组属性的包装器:种类、ID/名称、父键、命名空间。
因此从种类和 ID 创建 key 不需要任何成本,因为这是本地操作(不需要数据存储)。
OTOH, key 分配确实会产生成本,因为这会创建一个具有唯一 ID 的 key ,并且这需要在后台查询数据存储。
关于google-app-engine - 创建数据存储的成本。 key : Storing a key in struct versus an id and fetching from the datastore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12087374/