3

アプリ エンジンの keys_only クエリが高速であることはよく知られています。

Google App Engine に、エンティティ データの一部のみを返すことができる「プロジェクション クエリ」を実行する機能が追加されました

https://developers.google.com/appengine/docs/python/ndb/queries?hl=pl#projection

プロパティとレコードの大規模なセット (逆シリアル化コストが高い) を持つモデルがあると仮定すると、そのオブジェクトに対して単一の KeyProperty を返すプロジェクション クエリを実行する場合と keys_only クエリを実行する場合のパフォーマンスの違いは何でしょうか?

これらのアプローチは両方とも、インデックスのみを使用して同等のパフォーマンスを実現するのではないでしょうか? または、keys_only クエリ内に固有のもので、より高速になりますか?

簡単な例:

class SomeObject(ndb.Model):
   user = ndb.KeyProperty()

次のパフォーマンスの違いは何ですか:

SomeObject.query().fetch(1000, projection=["user"])

SomeObject.query().fetch(1000, keys_only=True)

なぜ?

これは正確には「理由」ではありませんが、十分に近いものです。データ モデル間の違いを比較検討しています。

データを個別の Kind に分割し、エンティティ グループを使用して子を keys_only し、親を get_multi します(Bret Slatkins の Google I/O ビデオで示されているメッセージング アプリに似ています)。

対。

親キーを子テーブルに入れ、射影クエリを使用して親キーのみを取得し、次に get_multi 親を取得します

他にも多くの考慮事項がありますが、このパフォーマンスの質問に対する答えを知っていれば、設計オプションが絞り込まれます。

はい、ローカルで独自のテストを行う可能性があります...しかし、知識のある人から明確な回答が得られるのは素晴らしいことです...また、どこにも見つけることができなかったので、この知識を共有することは良いことです今のところ

ありがとうございました!


アップデート

いくつかの基本的なテストでは、keys_only クエリは完全なクエリよりも約 10 倍高速であることが示されています (これは研究と一致しています)...そして、単一の KeyProperty に対する射影クエリは、keys_only クエリの約 2 倍の時間がかかります (つまり、約 5 倍高速です) )

4

1 に答える 1