appengine ja night #6に行ってきた。 #appengine #ajn6

blog書くのめっちゃ遅れた。ちゃんと書きますよ。

slim3がリリースされましたね。そのslim3の目玉機能であるGlobalTransactionを荒川さん、ひがさんから解説頂きました。

今回はいくつかustream動画があります。これなかった人も動画を見ればいいですよ。

おしながき

図解Global Transaction

なぜGlobal Transactionが必要なのかについて、もしLocal Transactionだけで実装するとどのような問題が起こるのかを解説して頂いてます。

  • Local Transactionとは
    • AppEngineではEntityGroupが同一のものしかトランザクション制御ができません。その制限があるとどんな問題が起こるのかについてチケット購入を用いて説明されています。
      • チケットの購入者、チケットの残数を厳密に管理するにはトランザクション制御が必要ですが、Local Transactionを用いるとEntityすべてをEntityGroupにしなければいけません。しかし、そうすると同時更新ができなくなってしまいます。
  • Global Transactionとは
    • 複数のEntityGroup間でもトランザクションを制御できるようにしようというものです。どのように実装されているかというと準備と適用という流れで実行することで実現できることを説明していただきました。

Global Transaction

slim3のGlobal Transactionは早い。そのどうやって高速化しているか?というのが今回の目玉だったように思えます。

slim3 GlobalTransactionを使うにあたって注意があって、Global TransactionロックはGlobal Transactionを経由しなければいけません。そうしないとLocal TransactionのputがGlobal Transactionのapplyで上書きされる恐れがあります。gtxを使う人は常にgtxを使いましょう。

重要な話。このロックは、ロックを意識すると言う運用があって初めて有効な仕組みです! #ajn6 #appengine

rst2pdf.netの紹介

appengineをscalaでしばくぜ!

スキーママイグレーションについて議論

  • schemaVersionがEntityのプロパティに登録してあるのは前提
  • 時代がRDBからKVSへの流れているのはパフォーマンスの観点もあるが、DDLスキーマが固定されているのはデータ件数が数千万件以上になったときにスキーマ変更が大変。スキーマレスなものが求められたというものある
  • AppEngineでは数千万件データがあった時にどのようにマイグレーションすればいいのか?
    • 数千万件のすべてのレコードをputし直すのは現実的じゃないかもしれない。
    • schemaVersion毎にロジックを変更するか?
    • schemaVersion毎にどのようなモデル(.class)だったのかは把握しておく必要がある
      • EmpのschemaVersionがupした場合はEmp.class(Ver2)とEmpVer1.classを作っておくのがいいかも知れない。そして、EmpVer1.classからEmp.classにversionupするコードをEmpVer1が持っている感じ。slim3でどのようにサポートしたらいいのか悩んでいるので案があれば教えて欲しい。