- shin1ogawa
- 4292
- 0
- 4
- 0
ユーザがチケットを買う際、AliceがTicketAを買うとしたら…?ひとつのEGに収める?でも、bobがTicketAを買いたいかも・・?これらもおなじEGに入れる?→超デカイEGができちゃった!!ってなっちゃうよ。 #ajn6 #appengine
2010-03-19 19:11:35ポイントでチケットを買うシステム。さてどうする? 人のポイント講座も、チケットがすべてのEGに入る。これだとダメ。同時に、一人が一つのチケットしか買えない。GAEでは20tps。つまり1秒に20枚まで。こら、あかん。 #ajn6
2010-03-19 19:12:411エンティティグループの更新は,1秒20回ぐらいしかできない.全体を一つのエンティティグループにすると,これが限界. #ajn6
2010-03-19 19:13:19実際は、20tpsも出ない。getしてputしたりして、RPCの往復が必要となることが殆どだしね。 #ajn6 #appengine
2010-03-19 19:14:0320 tpsは、本当の上限。理論値なので、実際は10tpsを切る。1秒間に5回を超える更新をするなと、Googleはいっている。#ajn6
2010-03-19 19:14:21get/putだと100ms ぐらいかかるので実際には10/sぐらいしか 1エンティティグループに対する操作はできない. #ajn6
2010-03-19 19:14:30EG単位のスループット理論値は20tpsとなる。(1putの最短が50ms)実感だと10tpsくらいとのこと。 #ajn6
2010-03-19 19:14:32グローバルトランザクションとは、複数EGにまたがるトランザクションのこと。参加するEGを選択して独占できる。EGとはEntity Groupのこと。 #ajn6
2010-03-19 19:15:20グローバルトランザクション…複数のEGにまたがるトランザクションのこと。どのEGを独占するか?を選択して、更新操作を行う。 #ajn6 #appengine
2010-03-19 19:15:27今回は、グローバルトランザクションを考えていく上で、「うまくいかないパターン」を順に紹介していく、というふうに説明するよ。 #ajn6 #appengine
2010-03-19 19:16:22題材。Aliceがチケット ajn6を500ポイントで買う。残ポイントないと、買えない。チケットには限りがある。 #ajn6
2010-03-19 19:16:25aliceが5000pt持っていてajn6チケット買おう。EG1:alice, EG2:ajn6ticket。EG1のaliceの口座から残高を減らした後、EG2のajn6ticket残数を減らす。これを順に処理するとどーなんの? #ajn6 #appengine
2010-03-19 19:18:10この例だと、チケットが売り切れてたらaliceの残高を元に戻す、補償トランザクションが必要になっちゃうね! #ajn6 #appengine
2010-03-19 19:18:42アリスのポイントを500減らして、いざチケットを買おうとすると、ないとき。あとでアリスのポイントを戻さないといけない。でもGAEでは30秒で処理切られるので、保証できない。逆の順序でもダメ #ajn6
2010-03-19 19:19:12