日々学んだことを残しておこう。きっと未来の自分が探しにくる。 (ただ忘れっぽいだけです…)

スポンサーサイト


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

-------- : スポンサー広告 :
Pagetop

DB トランザクション


データベースで一連の処理を行う必要がある時、複数の処理を一つにまとめたものをトランザクションと言います。

一連の処理が正常にいったときと障害が起きたときでコミットとロールバックを使い分けて整合性を保つ用にすると。
よくある例で口座送金のたとえのやつです。


もう少し細かく分類すると、隔離レベルが4つあるのでまとめるとこんな感じ。
(引用サイト)
http://www.techscore.com/tech/sql/SQL11/11_03.html/

READ UNCOMMITTED共有ロック、排他ロックも使用されない、最も隔離性の緩やかなレベル。ダーティリード、ノンリピータブルリード、ファントムインサートが発生する可能性がある。
READ COMMITTEDトランザクションが開始されて、まだコミットされていない場合には、他のトランザクションからはデータを参照することができないレベル。従って、ダーティリードは発生しない。しかし、他のトランザクションによりデータの変更は可能なため、ノンリピータブルリード、ファントムインサートが発生する可能 性ある。
REPEATABLE READトランザクションが完了するまで共有ロックが継続されるので、一度読み取ったデータが他のトランザクションによって変更されることはない。ファントムインサートが発生する可能性がある。
SERIALIZABLE他のトランザクションからは完全に隔離したレベルで、他のトランザクションの影響を一切うけない。トランザクション実行中に、他のトランザクションがア クセスしても、そのトランザクションは待機状態になり、前のトランザクションが終了するまでデータにアクセスすることができない。


複数のトランザクションが近いタイミングで同じデータにアクセスすると、こんな問題が。
ロストアップデート     あるトランザクションで変更した値が、他のトランザクションにより別の値に変更されてしまうこと。
ダーティリード他のトランザクションがデータの変更を取り消したにも関わらず、取り消し前にそのデータを読み出してしまうこと。
ノンリピータブルリード        あるトランザクションにおいて、同じ行を 2 回読み込んだときに、1 回目と 2 回目の読み込みの間に、他のトランザクションが行の値の変更を行ったために、1 回目と 2 回目で読み込んだデータの値が異なってしまうこと。
ファントムインサートあるトランザクションにおいて、WHERE 句等による同じ条件により行を読み込んだときに、その途中に他のトランザクションがその条件に影響を与える行の挿入を行ったために、先に読み込んだ行と後に読み込んだ行が異なってしまうこと。


こちらのサイトに図解を用いて説明されているので分かりやすいです。
トランザクションの定義


トランザクションが衝突する頻度によって、どのくらいゆるくするかをサービスの実態にあわせて決めないといけない。
上のような定義みたいのはいろいろなサイトに書いてあるんだけど、実際大きいシステムのってどのように運用されているか気になった。

ちょっとAmazonでヒットしたのはこちら。
大規模サービス技術入門。
期待する部分が載っているか分からないけど、興味出たので買ってみようっと。
いい情報あったら報告しまーす。
[Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB+DB PRESS plusシリーズ)
関連記事

2011-07-06 : DB : コメント : 0 : トラックバック : 0
Pagetop
コメントの投稿
非公開コメント

Pagetop
« next  ホーム  prev »

広告

読みたいと思っている書籍

Amazon Web Services クラウドネイティブ・アプリケーション開発技法 一番大切な知識と技術が身につく Amazon Web Services 定番業務システム12パターン 設計ガイド イラストで学ぶ 機械学習 最小二乗法による識別モデル学習を中心に (KS情報科学専門書) イラストで学ぶ ディープラーニング (KS情報科学専門書)

カウンタ

メールフォーム

名前:
メール:
件名:
本文:

GoogleTranslate

管理人のつぶやき

人気記事ランキング

カテゴリ

openclose

ブログ内検索

全記事表示リンク

全ての記事を表示する

ブログパーツ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。