jjzjj

google-app-engine - 创建数据存储的成本。 key : Storing a key in struct versus an id and fetching from the datastore

coder 2023-06-29 原文

考虑以下两种选择。

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/

有关google-app-engine - 创建数据存储的成本。 key : Storing a key in struct versus an id and fetching from the datastore的更多相关文章

随机推荐