[Seasar-user:19024] Re: [S2JDBC] TableIdGenerator での採番は分散環境でも問題ないでしょうか
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2009年 12月 12日 (土) 00:00:00 JST
小林 (koichik) です.
Date: Fri, 11 Dec 2009 19:20:59 +0900
From: Shotaro Tsubouchi <[E-MAIL ADDRESS DELETED]>
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:19023] [S2JDBC] TableIdGenerator での採番は分散環境でも問題ないでしょうか
> 同時だと、同じ値が取れてしまうと思います。
> Server1: update ID_GENERATOR set VALUE = VALUE + 50 where PK = 1
> Server2: update ID_GENERATOR set VALUE = VALUE + 50 where PK = 1
> Server1: select VALUE from ID_GENERATOR where PK = 1 // VALUE = 100
> Server2: select VALUE from ID_GENERATOR where PK = 1 // VALUE = 100
update と select はトランザクション中で実行されます.
update でロックがかかるため,server1 のトランザクションが
コミットされるまで,server2 の update は待機させられます.
そのため上記のような状況にはなりません.
> FOR UPDATE しないとならないように思いますが、どうでしょうか。
update と select が同じトランザクション内でない場合,
select を for update にしても上記の状況を回避することは
できません.
--
<component name="koichik">
<property name="fullName">"Koichi Kobayashi"</property>
<property name="email">"[E-MAIL ADDRESS DELETED]"</property>
<property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>
Seasar-user メーリングリストの案内