QUIZ 30分

合格基準

8問中7問正解(80%以上)で合格


Q1: ACID特性

ACID特性のうち「Atomicity(原子性)」が保証するものはどれか?

  • A) トランザクション前後でデータの整合性制約が保たれる
  • B) トランザクション内のすべての操作が成功するか、すべて失敗するか
  • C) 同時に実行されるトランザクションが互いに干渉しない
  • D) コミットされたデータが永続的に保存される
回答と解説

正解: B

Atomicity(原子性)は「全部成功か全部失敗か」のどちらかを保証する。途中まで成功して途中で失敗した場合、すべての変更がロールバックされる。Aは Consistency、Cは Isolation、Dは Durability。


Q2: 分離レベル

「Non-Repeatable Read」を防ぎつつ最も低コストな分離レベルはどれか?

  • A) READ UNCOMMITTED
  • B) READ COMMITTED
  • C) REPEATABLE READ
  • D) SERIALIZABLE
回答と解説

正解: C

REPEATABLE READ は Non-Repeatable Read を防止する最低限の分離レベル。READ COMMITTEDでは防げず、SERIALIZABLEは必要以上に制限が強い。


Q3: 悲観的ロック

SELECT FOR UPDATE の正しい動作はどれか?

  • A) 選択した行を他のトランザクションが読み取れなくなる
  • B) 選択した行に排他ロックを取得し、他のトランザクションの更新をブロックする
  • C) 選択した行のバージョン番号をインクリメントする
  • D) 選択した行を即座にCOMMITする
回答と解説

正解: B

SELECT FOR UPDATEは選択した行に排他ロック(exclusive lock)を取得する。他のトランザクションがその行をUPDATEまたはDELETEしようとするとブロックされる。READは分離レベルによっては許可される。


Q4: 楽観的ロック

楽観的ロックで更新が失敗した(affected rows = 0)場合、最も適切な対応はどれか?

  • A) エラーを無視して処理を続ける
  • B) テーブルロックを取得して強制的に更新する
  • C) 最新データを再読み込みしてリトライする
  • D) トランザクションを永遠にリトライし続ける
回答と解説

正解: C

楽観的ロックで競合を検出した場合は、最新データを再読み込みし、リトライする。リトライ回数に上限を設けて無限ループを防ぐことも重要。


Q5: Sagaパターン

Sagaパターンの「補償トランザクション」の役割はどれか?

  • A) 処理を高速化する
  • B) 失敗したステップの操作を取り消す
  • C) データベースをバックアップする
  • D) 並列処理を実現する
回答と解説

正解: B

補償トランザクション(Compensating Transaction)は、Sagaの途中で失敗した場合に、すでに成功したステップの操作を取り消す(undo)ための処理。例えば在庫確保の補償は在庫の解放、決済の補償は返金。


Q6: 2PC vs Saga

2PC(Two-Phase Commit)とSagaパターンの違いとして正しいものはどれか?

  • A) 2PCは結果整合性、Sagaは強い整合性を提供する
  • B) 2PCは全参加者の同意を得て一斉コミット、Sagaはローカルトランザクションの連鎖
  • C) 2PCはNoSQL専用、SagaはRDB専用
  • D) 2PCは非同期、Sagaは同期処理
回答と解説

正解: B

2PCはコーディネーターが全参加者のPrepare/Commitを制御し、全員一致でコミットする。Sagaはローカルトランザクションをチェーンのようにつなぎ、失敗時は補償トランザクションで巻き戻す。


Q7: イベントソーシング

イベントソーシングの特徴として正しいものはどれか?

  • A) 現在の状態だけを保存し、履歴は捨てる
  • B) イベント(出来事)を記録し、状態はイベントの再生で導出する
  • C) CRUDの UPDATE を多用する設計パターン
  • D) NoSQL 専用のパターン
回答と解説

正解: B

イベントソーシングは、データの変更をイベント(出来事)として記録し、現在の状態はイベントを順番に再生して導出する。銀行の通帳のように、すべての取引を記録し、残高はその計算結果として得られる。


Q8: CQRS

CQRSパターンの「Projection」の役割はどれか?

  • A) コマンド(書き込み)を検証する
  • B) イベントからRead Model(読み取り専用モデル)を構築する
  • C) データベースのバックアップを作成する
  • D) ユーザー認証を行う
回答と解説

正解: B

Projectionはイベントストアのイベントを購読し、Read Model(読み取りに最適化されたデータベース)を構築する処理。これにより、書き込み側(イベントストア)と読み取り側(ReadDB)を分離し、それぞれに最適化できる。


結果

合格(7問以上正解)

トランザクションとデータ整合性の知識をしっかり身につけています。Step 5「マイグレーションと運用」に進みましょう。

不合格(6問以下)

Step 4 のレッスンを復習してから再挑戦してください。特に以下を重点的に:

  • ACID特性と分離レベルの理解
  • 悲観的ロックと楽観的ロックの使い分け
  • Sagaパターンの補償トランザクション

推定所要時間: 30分