NDBを使用すると、クエリのプロジェクションを指定して、クエリに一致するエンティティに対して取得されるプロパティの数を制限できます。
ndb.get_multi()
ただし、常に完全なエンティティをフェッチするを使用するときにプロジェクションを指定する方法については、ドキュメントに何も見つかりませんでした。
使用時に特定のプロパティのみをフェッチする方法はありndb.get_multi()
ますか?
NDBを使用すると、クエリのプロジェクションを指定して、クエリに一致するエンティティに対して取得されるプロパティの数を制限できます。
ndb.get_multi()
ただし、常に完全なエンティティをフェッチするを使用するときにプロジェクションを指定する方法については、ドキュメントに何も見つかりませんでした。
使用時に特定のプロパティのみをフェッチする方法はありndb.get_multi()
ますか?
いいえ、投影機能はクエリに対してのみ機能します。get()操作を投影することには(I / O操作が少ないという点で)利点はありません。
でプロジェクションを使用するとndb.get_multi()
パフォーマンスが向上するという状況になりました。私は最大25のプロパティを持つ大きなエンティティクラスを持っており、そのうちのいくつかは繰り返されています。アプリの各Webページを提供するには、これらのオブジェクトを約10個get_by_idする必要がありますが、オブジェクトごとに必要なプロパティは4つだけです。プレーンを使用してこれを実装するとndb.get_multi()
、フロントエンドのCPU時間の約半分が、という名前のNDB APIメソッドに費やされることにModel._from_pb
なります。つまり、データベースから読み取られたオブジェクトを逆シリアル化します。これは、プロジェクションで改善される可能性があるもののように見えます。実際、私の場合、以下の方法でプロジェクションを使用すると、全体的な応答時間が半分に短縮されました。
Product.query(Product.key.IN(keys_to_get)).fetch(projection=list_of_columns)
Product
私のエンティティクラスの名前はどこにありますか。もちろん、この場合、クエリには新しいインデックスが必要です。