質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

解決済

1回答

15937閲覧

楽観ロックのデメリット、プログラムで制御する必要があるとは?

k499778

総合スコア599

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

1クリップ

投稿2015/01/18 14:02

javaプログラミング初心者です。

排他的制御の楽観ロックについて勉強しているのですが、
デメリットのひとつである、
プログラムで制御する必要がある
とはどういうことでしょうか?

ネットで調べていますが、うまく見つけることができません。
わかる方がいればよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。

まず、楽観的排他と悲観的排他については理解していらっしゃいますね?

悲観的排他=DBの機能として、テーブルロック、あるいは行ロックして、他者にデータ更新させない仕組み
楽観的排他=「プログラムで制御して」結果的に他者にデータ更新させない仕組み

です。
これらのメリット・デメリットはここではおいておきます。

で、楽観的排他の方法ですが、
(1)テーブルに、
・最終更新日時
・バージョンNO
のような楽観排他判定用カラムを用意します。

(2)データ更新時には、上記のカラムを常に更新するようにします。
ex)
・最終更新日時=常にシステム日時で上書き
・バージョンNo=更新のたびに、1づつアップ

(3)データ更新・削除時には、上記のカラムを条件節に含めるようにします。
このとき、
クエリの実行結果が0行だった=その条件に合うレコードがない=楽観排他カラムが更新されいている=他者が更新を行っている
ことになります。

こうすることで、「データ更新したい・削除したい」レコードが、その後変更されていないかどうか?を判断することができます。

O/Rマッパによってはこういった関数をあらかじめ用意してある場合もありますので、うまく利用してみてくださいね。

投稿2015/01/18 15:04

shiina

総合スコア55

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k499778

2015/01/18 15:17

回答ありがとうございます。 楽観ロック悲観ロックについては自分なりに勉強したつもりです。 バージョンナンバーをテーブルのカラムに追加する仕組みも勉強しました。 そういう風にすることがつまりプログラムで制御するということだったということでしょうか? 私はまず前提としてわかっていなかったのかもしれません。 初心者の私の勝手なイメージとしては、DBなどで悲観ロックか楽観ロックかをドロップダウンリストのようなものから選べて簡単に設定できる。というものでした。 そうではなくて楽観ロックにするには、タイムスタンプやバージョンナンバーを開発者が用意して、まさしく「プログラムで制御する」必要があるということでしょうか? その認識であっているでしょうか? 追加質問となってご迷惑かもしれませんが、ご都合の良いときに返答いただけたらと思います。
shiina

2015/01/18 15:21

まさに、takaRyoさんのおっしゃるとおり、それが、「プログラムで制御する」ということです! (DBの「機能」として、楽観ロック、というものはありません)
k499778

2015/01/19 10:32

なるほどですね!shiinaさんのおかげでスッキリしました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問