Appstatsを有効にしてアプリケーションのプロファイリングを行った後、どうにかしてコストを削減する方法を見つけようとして、私はパニックに陥りました。リクエストあたりのコストの多くはクエリによるものだったので、クエリをできるだけ排除するように努めました。
たとえば、特定の日付Xの後にユーザーのStatusUpdatesを取得したいというクエリが1つありました。クエリを使用して、次のものをフェッチしstatusUpdates = StatusUpdates.query(StatusUpdates.date > X)
ました。
そのため、システムの裏をかくことでクエリを回避できると思いましたが、読み取りコストを下げるために、書き込みコストが高くなります。ユーザーがステータスを書き込むたびに、そのステータスのキーをユーザーのリストプロパティに保存すると思いました。したがって、クエリを実行する代わりに、を実行しますndb.get_multi(user.list_of_status_keys)
。
問題は、これら2つのアプローチのシステムの違いは何ですか?確かに、2番目のケースではクエリを回避しますが、ここでは舞台裏で何が起こっているのでしょうか。キーを収集している2番目のケースで私が行っているのは、GAEがクエリで行ったであろう手動のインデックス作成を行っているだけですか?
一般に、get_multi(keys)とクエリの違いは何ですか?どちらがより効率的ですか?どちらが安価ですか?