[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 メーリングリストの案内