appengine java night #2に行ってきた
#1はHTML5の勉強会とかぶって行けなかったので色々予習して行ってきた。
前半(18:30〜21:00)まで普通にセッションを行って後半はピザやビールを飲みながらのセッション&LTでなかなかおもしろかった。が、空腹でビールを飲んだせいで酔っ払ってしまった。
やはりみんな興味がありそうだったのがパフォーマンスの部分。あと、トランザクションの考え方について色々質問がされてた。
app engineのトランザクションについてはあおうささんの所で言及されてます。
2009-10-07 - あおうさ@日記
DatastoreService#put
putには(というかdeleteにもある)トランザクションを指定してputする方法と、トランザクションなしでputする方法がある。この2つの違いは
どっちが速いのか、、忘れた。
App Engineのインスタンス
デプロイされたアプリはアクセスされたときにインスタンスが起動され、しばらく使われなかったりすると落ちているらしい。だから、しばらくアクセスがなかったとき次にアクセスした人はインスタンスが起動するまで待たされたりする。
確かに、自分もサンプルを作って1日後にアクセスしたとき最初のアクセスが遅いなぁと思ってたんだよね。どっか設定があるのかなーと思ってたんだけど、そういうことなんだね。そしてここで重いフレームワークを使っていたりすると、インスタンスの起動に8〜9秒かかったりすることがあるらしい。Slim3は軽いのでそんなにかからないと思う。
JDOのパフォーマンス
JDOは遅い。関連を使ったり、トランザクションを使ったりすると(low-level APIに比べて)極端に遅くなる。
low-level APIはパフォーマンスもいいんだけど、JDOに比べて簡単、なんだよね。そこが一番おっきいような。JDOにくらべて圧倒的にはまらない。
っと思うのはshin1ogawaさんのajn1の時の資料を読んだからかな。これは必読。
appengine java night #1
asList, asIterator
- asList・・・指定した分のデータをがつっと一度にとってくる
- asIterator・・・一度にはとってこないでデータを部分的にとってくる
asListはがつっといっぺんに取ってくるのにたいし、asIteratorはチャンクサイズ、プリフェッチサイズとかで指定したサイズだけちまちまとってくるイメージかな。ひがさん曰く、asListでがつっと取ってきて処理するのがいいんじゃないかということでした。asIteratorはデータアクセスが複数にわたって行われるため処理が遅くなるし、それだけ大きなデータを処理するとなると30秒の制限にもひっかかりやすくなるんだって話、だっけな。。
テスト
shin1ogawaさんの話ではapp engineの本番環境に接続してテストが行えるという話がありました。なんかをデリゲートするクラスを作ってバイトコードを本番環境に送り込んでやるとなんとか見たいな。もう酔ってだめぽ。
でも、これかなり重要。GAEってまだ、ローカル環境と本番(appspot)の環境で動きが違っている所があるみたいだから、この方法をつかって本番のアプリでテストが出来るってことはそれだけテストの精度もあがるってことだし、そもそもローカルで出来ないことをテストできたりするってことだもんね。
そして、shin1ogawaさんが資料を公開してくれているので、熟読。
404 shin1のつぶやき ないわー Not Found: #appengine java night #2( #ajn2 )に参加した
おもしろそうなもの
最後に
id:bluerabbitさんと、id:kazunori_279さんとshin1owagawaさんと、id:higayasuoさんに挨拶させていただきました。ちょろっとしか話せてないけどみなさん気さくな方達でした。また次に会ったときもよろしくお願いしますw
そうそう、なんか名刺欲しいなーって思った。会社の名刺じゃなくて、個人用の。その方が圧倒的に認識されやすい気が(〜〜)