S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

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のオブジェクトをロックキーとして、排他制御が動作してるような感じ。
コメントにも、排他とタイムスタンプの制御について発言があります