1

次の 2 つの代替案を検討してください。

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) ID の保存

type 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 を保存するか、キー全体を保存するかだけです)。

Ex animo、アレクサンダー・イングリング

4

3 に答える 3

2

キーは基本的に、プロパティのセット(kind、id / name、親キー、名前空間)の単なるラッパーです。

したがって、これはローカル操作であるため(データストアを必要としない)、種類とIDからキーを作成するのに費用はかかりません。

OTOH、キーの割り当てにはコストがかかります。これは、一意のIDを持つキーを作成し、内部でデータストアをクエリする必要があるためです。

于 2012-08-23T08:34:53.897 に答える
2

ピーターはかなり良い答えを出したと思いますが、ここには 2 つのことが関係しています。

  1. ID からキーを生成し、ID を保存してストレージ コストを節約するか、実際のキーを保存する方が安価かどうかを尋ねているようです。ID からキーを生成することは非常に単純なハッシュであり、ほとんど無視できるものです。おそらく、もっと重要なことを心配する必要があります。どれくらいの費用がかかるかは言えませんが、非常に簡単な実験を行い、数十万回ループして費用を見積もることはできます。おそらくストレージよりも安価ですが、それが非常に重要であるとは思えません。

  2. 難しいのは、質問に含めなかった一意の ID を生成することです。そのためには、一意であることが保証されているデータストア キーを取得する方がおそらく簡単です。

于 2012-08-23T14:55:27.660 に答える
0

すでに述べたように、キーの作成にはほとんど費用がかかりません。したがって、ストレージコストを節約できるIDを保存することを選択します。キーを保存する利点は、IDが実際に指しているものに入力され、コードで発生する可能性のあるエラーを防ぐことができることです。たとえば、IDを保存する場合、そのIDを取得してから、コード内の間違ったエンティティからキーを作成することができます。キーを保存する場合、その間違いについて心配する必要はありません。また、データストアを犠牲にして、IDとキーの保存の違いはおそらく無視できる程度ですが、それについて考えるのに費やした時間はより価値があります。

于 2012-08-30T21:42:51.587 に答える