[Android] GAEの新料金体系対策(途中経過)
[Android] GAEの新料金体系対策(ひととおり完了)
を経て、なんとか無料枠での運用ができています。
だけど、まだ問題がありました。
それは、
GAEにGETしにいったけど、レスポンスが遅くてAndroid側でタイムアウトエラーになってしまう
というものでした。理由は、
(1) 1度のリクエストに対してレスポンスのデータ量が大きいために時間がかかる
(2) シングルスレッド処理なのでリクエスト時に前のリクエストが走っていたら、その処理が終わるまで待つために時間がかかる
そもそも(1)の時点で時間がかかっていたので、(2)は当然でした。
そこで知ったのが、GAE側で並列処理ができることでした。
実は、appengine-web.xmlが自動生成されたときにコメントアウトされていたんですね↓
<threadsafe>true</threadsafe>
全然見過ごしてました。
コメントアウトを外すと、並列処理ができるようになりました。
1つのインスタンスで複数のリクエストを捌けるそうです。
ただし、並列処理にすることで不具合がおこる作りになっていないか、プログラム側で注意が必要です。
それでも、(1)が解決しないと根本的解決には至らないので、対策を考えました。
それは、
ダウンロード回数を5回に分けて、1度のレスポンスにかかるデータ量を減らす
ことでした。
レスポンスデータの総量は同じですが、1レスポンスのデータ量が減りレスポンス時間が減ることで
Android側のタイムアウトエラーの頻度を減らすことができました。
それでもまだタイムアウトエラーが出るので、まだまだ調整するべき箇所があるんだろうなぁ…。
他に行った調整は、不要なインデックスを張らないことで
Datastore Entity Put Ops
Datastore Entity Delete Ops
の数を減らすというものでした。
これは、GAE管理画面左にある「Quota Details」で確認することができます。
これが、ゆくゆくはダッシュボードの「Datastore Write Operations」に関わってくるとのこと。
じゃあ、JDOではどうやって設定するのかというと、エンティティのクラス宣言でプロパティに
@Extension (vendorName = "datanucleus", key = "gae.unindexed", value = "true")
を付与すればよさそうでした。
Quota Detailsの過去分が見れないので、具体的な比較ができていませんが…。
■参考サイト
http://morado106.blog106.fc2.com/blog-entry-52.html
あとはGAEを使う際に設定しておくべき事を掲載しているサイトがあったので、そちらを参考に
「セッションを有効にする」「プリコンパイルを有効にする(現在はデフォルトで有効)」
を設定しました。
■参考サイト
http://d.hatena.ne.jp/itaosan/20100421
今出来ているのはこれくらい。
他にも見つけたら設定していきます。
2011年11月23日
[Android] GAEまわりの調整
posted by be-style at 11:14| Comment(0)
| Android
この記事へのコメント
コメントを書く