先日のエントリーでGoogle App Engine(以下GAE)での制限、特にDatestore Read Operation(以下DRO)の制限がキツイということを書いたけど、割と驚いてしまう事実が発覚した。

あの後、とりあえずMemcacheを使って必要最低限のデータアクセスで済む様にプログラムをチューンアップしてみて、実際にデータストアへの接続回数は改善された。が、どうにも改善されすぎている・・・。ー昨日は半日も持たずにDROが臨界点に達していたのに、昨日確認すると2%ほどしか消費されていない。Googlebotの巡回の量が減ったのかな?と思ったのだけど、そこまで目立った変化は無さそうだし、どうにも解せない。プログラムでコンテンツを表示する以上、キャッシュを使うといっても限度があり、普通に考えてそこまでの成果が出るとは考えにくい(厳密には他にもチューニングはしてるのだが)。

あれこれ考えてみて、一昨日はGAEの管理コンソール上でDatestore Viewerでデータの中身を確認していたことに思い出し、それが何か関係しているのかと調べてみたら、やっぱり管理コンソール上での作業もデータアクセスとみなされる模様。しかも管理コンソール上では、データは20件ずつ表示されるのだが、これはどうも全件取得してからそのうちの20件を表示すると言うような動きをしているみたい。(GQLコンソールを確認すると“SELECT FROM ***”でデータ取得を行っていた)

僕が保持しているデータストアの総数は1000件以上あるわけだけど、全件見ようとしたら1000×50でこれだけで一日のDROを消費されてしまうというからくりということが分かった。

公開して日も短く、Googlebot以外には殆どユーザーのアクセスが無い状況でこれだったので、途方にくれていたけど、まだGAEに関しては何とかなりそうで少し安心。むしろ早い段階でプログラムのチューンアップをする機会になってよかったと思う。

後はAmazon Product Advertising API のリクエスト制限(2000/h)の問題だけど、こればっかりはどうしたもんか・・・。