GAE のドキュメントには、次のように記載されています。
各 get() または put() 操作は個別のリモート プロシージャ コール (RPC) を呼び出すため、ループ内でそのような呼び出しを多数発行することは、エンティティまたはキーのコレクションを一度に処理する非効率的な方法です。
コードに他にどれだけの非効率性があるかは誰にもわからないので、できる限り最小限に抑えたいと思います。現在、各反復に個別のクエリがある for ループがあります。私にはユーザーがいて、ユーザーには友達がいるとしましょう。ユーザーのすべての友達の最新情報を入手したい。だから私が持っているのは、そのユーザーの友達の配列です:
for friend_dic in friends:
email = friend_dic['email']
lastUpdated = friend_dic['lastUpdated']
userKey = Key('User', email)
query = ndb.gql('SELECT * FROM StatusUpdates WHERE ANCESTOR IS :1 AND modifiedDate > :2', userKey, lastUpdated)
qit = query.iter()
while (yield qit.has_next_async()):
status = qit.next()
status_list.append(status.to_dict())
raise ndb.Return(status_list)
これを行うためのより効率的な方法はありますか、おそらくこれらすべてを 1 つのクエリにバッチ処理することはできますか?