appengine ja night #5 #ajn5
[Q]TaskQueueって指定した時刻に起動、とかできるの?→[A]ETAを指定すればできます。正確とは限らないけど。 #ajn5
2010-02-12 19:56:39#ajn5 TaskQueueで追加してすぐに実行じゃなくて、TaskQueueの実行を待ってくれる機能があったのか。知らなかった。いいこと知った。
2010-02-12 19:57:42#ajn5 Cursorの話。hasNextとかadvance(?)とか、よくわからない高度な議論がされてるなう
2010-02-12 20:02:16ashigeru:iteratorのhasNextはアドバンスしないから、ギリギリまでnextして、最後にhasNextだけすりゃーよい。 #ajn5
2010-02-12 20:02:24ロック機構を自前で用意せよ、ってことなのかな。うーむ。 RT @kashisan: Taskqueue は必ず呼ばれるが、複数回呼ばることがある。 #ajn5
2010-02-12 20:04:18tmatsuo: pythonだとCursorを使ったページングがちょっと微妙(JavaではできるけどLLAPI使わなきゃならん)。無理くりやってircに投げたらNickから「Be cautions」言われた!だからこのコードはおすすめできないYO! #ajn5
2010-02-12 20:05:49エンティティグループはできるだけ小さく作るのは、GAEの基本。 大きくしすぎると、たくさん競合が起こってしまう。 #ajn5
2010-02-12 20:15:172PCには登場人物がいる。ザックリ言うと「トランザクションコーディネータ」「リソースマネージャ」のふたつ。 #ajn5
2010-02-12 20:16:30準備完了したあと、コミットしてねと言っている時に落ちても、立ち上がるときにちゃんとコミットされる。2フェーズコミット #ajn5
2010-02-12 20:20:45大概のシステムはこんなカンジ。「ジャーナルの書き出し→内部的なコミット(ここが終わるとロールバック不可)→ロールフォワード(ジャーナルの適用)」 #ajn5
2010-02-12 20:23:06slim3では、0. ロックの取得、1. ジャーナルの書き出し、2. コミット、3. ジャーナルの適用、4. ロックの解放 #ajn5
2010-02-12 20:27:28#ajn5 GAEでトランザクションの中でロックをかけるのに大体100msecぐらいかかるらしい。ながっ
2010-02-12 20:34:20gtx(GlobalTransaction)のサンプルコードを書いてらっしゃるトコロ。まずはEGが別のモデルをふたつputする等。 #ajn5
2010-02-12 20:37:31#ajn5 Datastoreは0.1%から0.2%ぐらいの割合でDatastoreTimeoutExceptionが発生するらしい。これはJavaだから?Pythonでも同様のエラーは発生してる?
2010-02-12 20:41:18beginGlobalTransactionしたときに、GlobalTransactionはThreadLoacalなところにはいる。#slim3 #ajn5
2010-02-12 20:44:00AppServer側のリトライだったのが、1.3.1からDatastoreサーバー側のリトライも実装されたらしい #ajn5
2010-02-12 20:44:07allocateIds()の話。個人的にはこいつがslim3のLLAPI化の決定の引き金なったひとつの要素な気がしてるんだけど、一度ひがさんに聞いてみたいな。 #ajn5
2010-02-12 20:44:32#ajn5 DatastoreTimeoutExceptionが出ても実際はputされていることがある。そのため、自動採番なputをリトライすると2重登録される可能性がある。事前に採番しておいた方がいい。
2010-02-12 20:44:50Keyを自動採番しておけば、ダブってputしてもinsertエラーになるのではなくupdateになるので安心。 #ajn5
2010-02-12 20:47:47