0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「トランザクション」と原子性 ― DBMSは何を保証してくれるのか

0
Posted at

はじめに

基本情報技術者試験の過去問(令和3年 問28、原子性の問題)を解きながら、トランザクション・ACID・DBMSといった概念を整理した。
最初は用語がバラバラに見えていたが、「DBMSがトランザクションのACIDを保証する」 という一本の筋でつながった。その流れをまとめる。

DBMSとデータベースは別物

まず混同しやすい二つを分けておく。

データベース(DB) … データを整理して集めたもの「そのもの」。(例:馬名・レース記録・会員情報の表の集まり)
DBMS(Database Management System) … そのデータベースを管理する「ソフトウェア」。データの保存・検索・更新・削除を行い、複数の要求を整理し、ACIDなどの規則を守る。

MySQL、PostgreSQL、Oracle などが DBMS にあたる。
今回の過去問が「DBMSに実装すべき原子性」と問うのは、原子性を実際に保証する責任者がDBMSだからである。DBは「管理されるデータ」、DBMSは「管理するプログラム」だ。

トランザクションとは

複数の作業を一つにまとめた「ひとかたまりの単位」である。

例えば馬券を1枚買うとき、内部では二つの作業が起きる。

① 残高から購入額を引く
② 馬券を1枚発行する

この二つは切り離してはいけない。こうした「必ず一緒に処理すべき作業の束」をまとめたものがトランザクションだ。

ACID ― トランザクションが守るべき4つの約束

原子性(Atomicity) … 全て実行されるか、全て取り消されるか
一貫性(Consistency) … 規則に合った正しい状態だけを保つ
独立性(Isolation) … 他のトランザクションに邪魔されない
持続性(Durability) … 完了したものは障害が起きても消えない

今回の問題は、この中の 原子性 を問うている。

原子性(Atomicity)を深掘りする

atom は「これ以上分けられないもの」。トランザクションを分けられない一つの塊として扱う、という意味だ。

全て成功すれば全て反映(COMMIT)、一つでも失敗すれば全て取り消し(ROLLBACK)。「中間状態」は存在しない。

馬券購入でいえば、①残高だけ引かれて②発行が失敗すると、「お金は減ったのに馬券がない」という幽霊のような状態になる。
原子性はこれを禁止し、①まで無かったことにして残高を元に戻す。

ここで大事な気づきがある。原子性の本質は「成功の保証」ではなく「失敗したときの巻き戻し」にある。
成功は原子性がなくても起きる。失敗時にきれいに戻せることこそ、原子性が存在する理由だ。

だから原子性を確認したいときは、こう問えばよい。

「失敗したらどうなるか?」 ― 元に戻れば原子性あり、中途半端に残れば原子性が壊れている。

過去問で確認

問題は「原子性を説明したものはどれか」。他の選択肢は、ACIDの別の性質を説明した引っかけになっている。

「完了後に障害が起きても更新内容が保証される」→ 持続性(Durability)
「全て実行されるか、全て取り消されるか」→ 原子性(Atomicity)=正解
「他のトランザクションの影響を受けない」→ 独立性(Isolation)
「同じ処理を何度実行しても結果が同じ」→ ACIDのどれでもない引っかけ

持続性(障害後も保証)や独立性(互いに干渉しない)と混同しないことが、この問題の要だった。

まとめ

DBは「データそのもの」、DBMSは「それを管理し、ACIDを保証するソフトウェア」。
トランザクションは「必ず一緒に処理すべき作業の束」。
原子性=全て実行 or 全て取り消し。本質は「失敗時のロールバック」。
確認法:迷ったら「失敗したらどうなるか?」を問う。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?