computer.unix - UNIX

UNIX 関連の情報交換ボード

#57: MySQL
Date: 2000/07/25 09:49:18 Tue Author: 沢渡 みかげ (subop)
Parent Article: #56: MySQL

> 要するに、アクセスが重なったときに整合性が取れるように
> 片方の処理をきちんとひとまとめの処理として終わらせる
> と言うような機構のことでしょうか。

たとえば,銀行である人Aが別の人Bにお金を振り込むとき,
1.Aの口座の残高をとりだし,x円引き,結果を書き込む
2.Bの口座の残高をとりだし,x円足し,結果を書き込む
という2つの処理をするわけです.

もし,ここで1が終わった段階でマシンがフリーズすると,
x円が消失してしまいます.

また,別の問題として,Aさんが振込処理すると同時に,
別のCさんがAさんの口座に振り込もうとしたとき,
1の処理で残高を取りだしたあとにCさんの振込処理で
残高が増えた場合,その後1の処理で結果を書き込むと,
振込処理で残高が増えた分が消えてしまいます.

% 実際このくらいの簡単な操作なら,トランザクション以前に
% 1つの塊として処理されますが(^^;;

そういった問題を防ぐために,1と2を1つの塊として
処理するのがトランザクションですね.

PostgreSQLは良く知りませんが,Oracleなどであれば,
トランザクション完了の通知を受け取った段階で,
たとえマシンがフリーズしようが電源切ろうが
ちゃんと実行した内容は保存されてますし,
途中でダメになったらトランザクション全体が
キャンセルされます.

>> ただ,速さなら一番でしょう(^^;
>> めちゃくちゃ速いはずです.
> そうなんですか。いいことを聞きました(^^)
> ただ、複数テーブルの処理になると整合性が取れなくなる可能性が
> あるわけですね。

複数テーブルの場合,A,B,Cのテーブルがあるなら,
その2つのテーブルを排他ロックしてから書き替えれば,
(DBが途中で止まらない限り)整合性はとれます.

ただ,テーブルのロック順を統一しないとデッドロックに
なってしまうのでまずいです.

■ この記事のコメントを書く

■ この書き込みを削除/復活します(投稿者のみ可)
■ この書き込み近辺の一覧表示へ

【最新20記事 [一覧] [ツリー] [一括] 】 【最新の記事は 89 番です.】
【前の16記事 [一覧] [ツリー] [一括] 【次の20記事 [一覧] [ツリー] [一括]
番から 番までの記事を
UNIX に新しい記事を

T-Net ■ メインページ