BigtableとEntityGroupとトランザクション
ひがやすを blog > App EngineのEntityGroupを理解しようの記事が、よく理解できなかった(汗
ので、ここのスライドのp49〜p60とか。
気になるのはp54の
Entity groups
* Defined by root entities
* Consists of root and all descendants
* Journal, last committed timestamp co-located with root entity
の「Consists of root and all descendants」って、root以下の全てのエンティティ?行?って意味なのか?とか。
で、トランザクションとしては、ジャーナルとタイムスタンプの動きと併せて理解するとよさげ?
p58の
* Write to journal in parent's entity group row
とか。
親子の階層が深くなった時の「parent's entity group row」って途中の行も含まれる(rootだけじゃない)のかな?
上の「Consists of root and all descendants」になるのだろうか?
ひがさんの
AppEngineは、トランザクション中にEntityがアクセスされると、そのEntityGroupのrootとなるEntityを取得し、トランザクション用に更新します。…
からすると、rootだけってことかな?
それから、p59の
* Apply journalled changes to parent and child
* Write new committed timestamp to entity group
* Update parent.cash and child.cash index rows
とか。
追記:
ひがさんが、もう少し詳しく動作を書いて下さいました。
ひがやすを blog > App Engineのユニーク制限を正しく理解しよう
追記の箇所。getとqueryでの違いとか要注意。
getがSELECT FOR UPDATEっぽく、EntityGroupのrootのオブジェクトをロックキーとして、排他制御が動作してるような感じ。
コメントにも、排他とタイムスタンプの制御について発言があります。