1

何度も、1つのエンティティの属性の値だけが必要です。したがって、key.get()でEntity全体を取得する必要はありません。Google Datastore、特定のエンティティプロパティを取得する

Iは、投影クエリは、指定した属性を持つ不完全なエンティティを返すことを知っています。値はインデックス内にあるため、データストアからエンティティを取得する必要はありません。

インデックスからデータを取得するほうがデータストアよりも速いと仮定しているため、キーが与えられていれば、データストアの代わりにインデックスから情報を取得する方法があります。

たとえば、何かのように: 記事= some_key.get(投影= [Article.title]) 印刷article.title

それを行う方法はありますか?それは尋ねる新しい機能かもしれませんか?

EDIT: 方法がないようです。既存のインデックスはプロパティによって並べ替えられます。唯一の方法は、キーで注文されたインデックスを1つの列に作成する方法がある場合ですが、余分なインデックスを持つことはそれほど有用ではないようです。

+0

あなたは正しい方法はありません。 –

+0

確認していただきありがとうございます。少し試して、私は現在のエンティティのキ​​ーの値を保存するプロパティフィールドを追加することができますので、インデックスに保存され、キーで順序付けられますが、それは価値がないと思います。この場合、索引は次の形式になります。 key_property |タイトル| __key__ | –

答えて

3

これは、他の情報がなければ早すぎる最適化の匂いが強い。時間の潜在的な違いが、処理の大部分を最適化できると考えていない限り、間違った領域で作業しています。追加の注意点としては

、実体を得る際の待ち時間の大部分は、エンティティのサイズとは無関係のネットワーク遅延です。大規模なエンティティ(xx-xxxx KiB)で作業している場合を除き、データ取得サイズはレイテンシにはあまり影響しません。

あなたが大規模なエンティティを持っているし、実際にそれを試してみたいならば、効果的にあなたがまだ強く一貫しながら聞いて何をすべきか周りの仕事がある、と述べました。

例:あなたは親切myKindからプロパティmyField1 & myField2を取得したいと仮定しましょう。

あなたはこの指標が必要になります:

select myField1, myField2 from myKind WHERE __key__ HAS ANCESTOR Key(myKind, myId) 

- kind: myKind 
    ancestor: yes 
    properties: 
    - name: myField1 
    - name: myField2 

は、エンティティのidがMYIDで、実体は何の子孫を持っていない、それがクエリで行うことができると仮定注:これは子エンティティで行うことができますが、唯一の要件は同じ種類の子孫を持たないことです。

enter image description here

HAS ANCESTORオペレータは、この場合にも、あなたが探している実体である祖先を、一致するので、これは動作します。 HAS ANCESTORを使用すると、クエリは強く一貫しているため、強く一貫性のあるgetのように動作します。

このアプローチの欠点は、それが先祖を含む複合インデックスが必要である - これはより多くのストレージを必要とします。もう一つの欠点は、おそらく高速ではないということです。 YMMV。

関連する問題