合格基準
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分