2

GAE Python の利用コストを下げるために、DB の読み込み操作を最適化したい。何か提案はありますか?

GAE が思ったよりもかなり多くの DB 読み取り操作を表示する理由がわかりません。GAEがDB読み取り操作をカウントする方法の一般的なロジックを提供できれば、それも非常に役立つはずです。

ありがとう!

4

2 に答える 2

4

高レベルの操作 (get、query、put、delete など) が低レベルの操作 (小規模、読み取り、書き込み) にかかるコストの完全な内訳は、https://developers.google.comで確認できます。 /appengine/docs/billing (半分ほど下にスクロール)。

AppStatsを使用して、読み取り操作がどこから来ているかを追跡することを強くお勧めします。注意すべき大きなことの 1 つは、ページネーションにoffsetwith オプションを使用しないこと.fetch()です。これは、結果をスキップするだけで、読み取りコストがかかるためです。つまり、そうすると.fetch(10, offset=20)、30回の読み取りが必要になります。代わりにクエリ カーソルを使用します。

もう 1 つの最適化は、キーによるフェッチ ( .get(keys)) とクエリの比較です。これは、クエリの 1 読み取り + 返される各エンティティの 1 読み取りのコストがかかるクエリとは対照的に、1 読み取り操作のみのコストになります (したがって、1 つのエンティティを返すクエリは 2 読み取りのコストがかかります。 but a .get()for that same entity would only cost 1 read. また、クエリに対して1 回の読み取りが必要ですが、取得される予測されたエンティティごとにわずか 1 回の予測クエリを使用して確認することもできます (注:予測されるすべてのプロパティにインデックスを付ける必要があります)。

また、 NDB APIをまだ使用していない場合は、自動的にフェッチをキャッシュし、読み取り操作を減らすのに役立つ NDB API を使用する必要があります。公式ドキュメントに加えて、 Rodrigo と Guido によるNDB チート シートは、ext.db から ndb に移行するための優れた方法です。

ここのデータストア使用の管理の下にいくつかの良いヒントがあります: https://developers.google.com/appengine/articles/managing-resources

最後に、 gae_mini_profilerの使用にも関心があるかもしれません。これは、現在のリクエストの AppStats への便利なアクセスと、その他の役立つプロファイリングおよびログ情報を提供します。

于 2013-01-26T03:32:11.553 に答える
1

コードを見ずに理由を言うのは難しいですが、まだ行っていない場合は、memcache を使用してデータベースの読み取りを節約してください。

https://developers.google.com/appengine/docs/python/memcache/usingmemcache

于 2013-01-26T01:01:24.997 に答える