App Engineバージョン1.3.6のreleased Aug-17-2010では、1000アイテムのfetch()
の制限が削除されました。App Engineではクエリフェッチ()と繰り返しが効果的に同じですか?
ModelClass.all().fetch(limit=99999999999)
と[e for e in ModelClass.all()]
は同じ意味ですか?
異なる場合は、微妙に異なる場合があります。たとえば、RPC呼び出しの数は同じですか?
App Engineバージョン1.3.6のreleased Aug-17-2010では、1000アイテムのfetch()
の制限が削除されました。App Engineではクエリフェッチ()と繰り返しが効果的に同じですか?
ModelClass.all().fetch(limit=99999999999)
と[e for e in ModelClass.all()]
は同じ意味ですか?
異なる場合は、微妙に異なる場合があります。たとえば、RPC呼び出しの数は同じですか?
フェッチから1000エンティティの制限が削除されましたが、依然として自分自身の明示的な上限を指定する必要があります。もちろん、これを十分大きくすると、すべてのエンティティを取得できます。
上記で提案した反復子アプローチは機能的に同等です(フェッチに渡される制限がすべてのエンティティを取得するのに十分な大きさである場合)。しかしながら、それらは異なる性能特性を有する。特に、反復子は、小さなアイデンティティのチャンクを一度にフェッチします。エンティティが多数ある場合は、イテレータを使用するバージョンではさらに多くのRPCが作成されます。
ありがとう、それは私の疑いでした。 (また、私の質問を更新しました - 私が書いたように、私は 'limit = BIG_HUGE_NUM'を考えていましたが、元の質問に入れませんでした) –
fetch()はイテレータよりも少ないRPCを使う利点がありません特別なbatch_sizeパラメータが提供されます。ただし、batch_sizeはrun()にも渡すことができるため、fetch()にはパフォーマンス上のメリットはありません。 http://bjk5.com/post/23601113262/app-engine-performance-essentials-youll-certainlyを参照してください。 – kamens