忍者ブログ
情報処理技術者試験の合格を目指す全受験者のための、1問1問「徹底解説」ブログです。単なる過去問の暗記ではなく、なぜその答えになるのかを本質的に理解できるよう解説します。書籍などでは学べない最新用語やトレンドを踏まえてご紹介します。

【データベース】データの独立性を守る3大設計図!「3層スキーマ」|情報処理問題1000本ノック

プログラムの変更がデータベースに影響しないようにする魔法の壁。ビュー、テーブル、物理ディスクの3つの視点を整理する「3層スキーマ」を攻略しましょう。

1. 【 問題 】:データベースの3層スキーマ構造

【 問題 】 データベースの設計思想において、データの独立性を高めるためにデータを「外部スキーマ」「概念スキーマ」「内部スキーマ」の3つの階層に分けて定義する「3層スキーマ構造」に関する記述のうち、最も適切なものはどれでしょうか?

① 外部スキーマは、ハードディスク上の物理的なデータの配置やインデックスの構造を定義する。
② 概念スキーマは、個々のユーザーやアプリケーションプログラムが必要とするデータの見取り図(ビュー)を定義する。
③ 内部スキーマは、データベース化の対象となる現実世界のデータ全体を、論理的なデータモデル(テーブル構造)として定義する。
④ 概念スキーマの変更が外部スキーマに影響を与えない性質を「論理的データ独立性」、内部スキーマ(物理構成)の変更が概念スキーマに影響を与えない性質を「物理的データ独立性」と呼ぶ。

2. 正解:

正解: ④ 概念スキーマの変更が外部スキーマに影響を与えない性質を「論理的データ独立性」、内部スキーマ(物理構成)の変更が概念スキーマに影響を与えない性質を「物理的データ独立性」と呼ぶ。

3. 解説:誰から見たデータか?3つの視点をスッキリ分離

3層スキーマ構造の目的は、「データ構造や保存場所が変わっても、プログラム(システム)を書き直さなくて済むようにする(データの独立性)」ことです。そのために、役割を3つの階層に分けています。

【3層スキーマの定義と役割】

■ 外部スキーマ(利用者・プログラムの視点)
役割:個々のユーザーやアプリケーションが「見たい形」にカスタマイズした設計図です。関係データベース(RDB)では「ビュー(仮想テーブル)」などがこれに該当します。

■ 概念スキーマ(データベース全体の論理的視点)
役割:開発者やDBMSから見た、データベース全体の「本来のテーブル構造(論理構造)」です。データの重複を無くす「正規化」を行い、実体の「テーブル」として定義します。

■ 内部スキーマ(ハードウェア・物理の視点)
役割:データを「ハードディスクやSSDのどこに、どうやって保存するか」「インデックス(索引)をどう配置するか」という、物理的なファイル構成を定義する設計図です。
[ 選択肢のひっかけポイント(すべて主語が入れ替わっている罠) ]
★ ①:ハードディスク上の物理的な配置を定義するのは「内部スキーマ」です。
★ ②:ユーザーやプログラムが必要とする見取り図(ビュー)を定義するのは「外部スキーマ」です。
★ ③:データ全体を論理的なテーブル構造として定義するのは「概念スキーマ」です。
→ 正解の④は、この3層に分けることで「物理構成(内部)を変えてもテーブル(概念)は壊れない(物理的独立性)」「テーブル(概念)を多少いじってもビュー(外部)で吸収できる(論理的独立性)」という最大のメリットを正しく説明しています。

1. 理解のコツ: 「一戸建ての家」に例えてみましょう。
・住人が毎日目にする「リビングやキッチンの内装(使いやすさ)」が外部スキーマです。
・大工さんや建築士が共有する「柱の位置や部屋の間取り図面(全体の構造)」が概念スキーマです。
・床下の基礎工事や「コンクリート、鉄骨の物理的な配置」が内部スキーマです。
もし「床下の鉄骨を最新の頑丈なものに変えた(内部の変更)」としても、部屋の間取り(概念)や住人の暮らし(外部)には何も影響しませんよね。これがデータの独立性です。
2. 試験対策の視点: 「外部=ビュー(利用者側)」「概念=テーブル(全体論理)」「内部=ディスク(物理保存)」という対応関係のペアを絶対に脳内でブレさせないようにしてください。基本情報・応用情報の午前試験では、各スキーマの定義をシャッフルしたひっかけ問題や、「論理的/物理的データ独立性」という言葉の意味を問う問題が非常によく狙われます。


4. まとめ

「データベースの設計図を、プログラム側の都合(外部)、データ全体の構造(概念)、ストレージの都合(内部)の3つに切り離し、お互いの変更が響かないようにする工夫」。これが3層スキーマです。この思想があるからこそ、私たちはインフラのハードウェアを増強(内部を変更)しても、今動いている業務システム(外部)を一切止めることなく、そのまま使い続けることができるのです。


PR

【データベース】データの出し入れを直接担うコア部品!「ストレージエンジン」|情報処理問題1000本ノック

データベース管理システム(DBMS)の内部で、実際にハードディスクやメモリにアクセスしてデータを書き換えているのは誰か?その心臓部となるコンポーネントを攻略しましょう。

1. 【 問題 】:DBMSの内部構成とコンポーネント

【 問題 】 データベース管理システム(DBMS)を構成するソフトウェアモジュール(コンポーネント)のうち、ユーザーが発行したSQL文の要求に基づき、メモリ(バッファプール)やディスクなどの物理ストレージ上にある実際のデータブロックを操作し、データの検索、追加、更新、削除(CRUD処理)を直接管理・実行するコアな部品はどれでしょうか?

① クエリオプティマイザ (Query Optimizer)
② ストレージエンジン (Storage Engine)
③ トランザクションマネージャ (Transaction Manager)
④ データディクショナリ (Data Dictionary)

2. 正解:

正解: ② ストレージエンジン(Storage Engine)

3. 解説:SQLの命令を「物理的な動き」に変える心臓部

DBMSの内部は、いくつかの役割を持ったコンポーネントがチームワークで動いています。今回の正解であるストレージエンジンは、文字通りデータの「倉庫(ストレージ)」を動かす「エンジン(動力源)」です。

【ストレージエンジンの役割と具体例】

・ユーザーが「このデータを更新して」というSQL文を送ると、DBMSの上層部(クエリプロセッサ)がそれを解析します。
・その解析結果を受けて、実際に「ハードディスクの〇番地にあるデータを読み出す」「メモリ上のデータを書き換える」といった、最も泥臭い物理的なデータの出し入れ(検索や更新)を一手に引き受けるのがストレージエンジンです。 ← ココが問題の正解!

※有名なオープンソースのデータベース「MySQL」では、標準のストレージエンジンとして高い信頼性を持つ「InnoDB」が使われているほか、用途に応じて「MyISAM」や「Memory」といった異なる特性のストレージエンジンへ自由に入れ替える(差し替える)ことができる構造になっています。
[ 選択肢のひっかけポイント(すべてDBMSの超重要コンポーネント) ]
★ ① クエリオプティマイザ:送られてきたSQL文を見て、「どのインデックスを使えば一番速く検索できるか」という最適な実行計画(ルート)を自動で計算・決定する頭脳です。
★ ③ トランザクションマネージャ:データの排他制御(ロック)や、処理の確定(コミット)・取り消し(ロールバック)を管理し、データの整合性を守る司令塔です。
★ ④ データディクショナリ:テーブルの名前や列のデータ型、主キーの設定といった、データベース自身の設計図情報(メタデータ)を保管しているシステム領域です。

1. 理解のコツ: 「レストラン」に例えてみましょう。
・お客さんから注文(SQL)を取り、一番効率よく料理を出す順番(実行計画)を考えるフロア長がクエリオプティマイザです。
・それに対して、指示を受けて実際に冷蔵庫(ディスクやメモリ)を開け、肉や野菜(実際のデータ)を取り出して包丁で刻んだり炒めたり(検索や更新)する現場の「料理人」ストレージエンジンです。実務を直接動かすエンジンそのものです。
2. 試験対策の視点: 「DBMSのコンポーネント」「メモリやディスク上のデータ」「検索や更新を管理(直接操作)」という記述があれば「ストレージエンジン」が一択です。基本情報や応用情報の午前試験では、データベースの「外側(SQL文の使い方)」だけでなく、このように「内側(DBMSがどうやってデータを処理しているか)」のアーキテクチャを問う問題として非常に好まれる応用キーワードです。


4. まとめ

「SQLによる命令を具体的なディスクやメモリへのアクセスに翻訳し、データの検索・更新を物理的に実行する、DBMSの最下層で働く心臓部」。これがストレージエンジンです。普段私たちが何気なく叩いているSQL文の裏では、このストレージエンジンがミリ秒単位で超高速にデータをさばいてくれています。


【データベース】実務のデファクトスタンダード!「Read Committed」|情報処理問題1000本ノック

データの安全性とシステムの処理速度。その2つが最も実用的なバランスで妥協(トレードオフ)した、実務で最頻出の分離レベル「Read Committed」を攻略しましょう。

1. 【 問題 】:トランザクション分離レベルの識別

【 問題 】 ANSI/ISOで定義されている4段階のトランザクション分離レベルのうち、他のトランザクションがコミット(確定)していない未確定の変更データの読み取り(ダーティリード)は防止されるが、自身の処理中に他のトランザクションがデータを更新・追加することによって発生する「ノンリピータブルリード」および「ファントムリード」の発生は許容されるものはどれでしょうか?

① Read Uncommitted (未コミット読み取り)
② Read Committed (コミット済み読み取り)
③ Repeatable Read (反復可能読み取り)
④ Serializable (直列化可能)

2. 正解:

正解: ② Read Committed(コミット済み読み取り)

3. 解説:「確定した事実」だけを信じる世界

Read Committedは、名前の通り「コミット(確定)されたデータだけを読み取る」というルールです。これにより、存在しない幻のデータを読んでしまう最悪の事態(ダーティリード)は100%防げます。

【なぜ他の2つの現象は起きてしまうのか?】

■ ノンリピータブルリードが起きる理由
・自分が1回目の読み込みをした後、他のトランザクションがデータを変更してコミットを完了したとします。
・Read Committedのルールは「コミットされたら読んでも良い」なので、自分が2回目の読み込みをすると、他人が確定させた最新の値(書き換わった後の値)が見えてしまいます。これが「同じ処理の中で、2回同じ場所を読んだのに値が変わってしまう(ノンリピータブルリード)」の原因です。

■ ファントムリードが起きる理由
・同様に、自分が検索した後に他人が新しいデータを挿入してコミットを完了すると、2回目の検索では、1回目には存在しなかったはずの「新しい行(ファントム)」が出現してしまいます。
[ 4段階のレベルと不整合の対応関係 ]
1. Read Uncommitted = 【全て発生】(最速・最危険)
2. Read Committed【ダーティ防止、残り2つは発生】(実務の標準) ← ココ!
3. Repeatable Read = 【ダーティ・ノンリピ防止、ファントムのみ発生】
4. Serializable = 【全て防止】(最堅牢・最遅)

1. 理解のコツ: 「オフィシャルの記者発表」をイメージしてください。まだ噂段階の未確定情報には一切耳を貸さず、公式発表(コミット)された情報だけを記事にするため、デマ(ダーティリード)を掴むリスクはありません。しかし、公式発表が朝と夕方で更新されれば、手元のニュース内容が変わる(ノンリピータブルリード)のは受け入れる、というスタンスです。
2. 試験対策の視点: 「ダーティリードは防ぐ(許容されない)」「ノンリピータブルリードとファントムリードは発生する(許容される)」という組み合わせが来たらRead Committedが一択です。多くのデータベースシステムでデフォルト(初期設定)に採用されているため、問題文での登場回数が圧倒的に多い最重要レベルです。


4. まとめ

「嘘のデータは読まないが、他人が確定させた最新の変化はそのまま受け入れる分離レベル」。これがRead Committedです。データの一貫性をある程度保ちつつ、データベースに余計なロック(待ち時間)をかけないため、大規模なアクセスを捌く現代のシステムにおいて最もバランスの良い設定とされています。


【データベース】最速だけど最も危険!ダーティリードを許す「Read Uncommitted」|情報処理問題1000本ノック

データの正確性と、同時処理のスピードはトレードオフの関係にあります。今回は、4段階ある「トランザクション分離レベル」の中で最も制約が緩いレベルを攻略しましょう。

1. 【 問題 】:トランザクション分離レベル

【 問題 】 ANSI/ISOで定義されている4段階のトランザクション分離レベル(アイソレーションレベル)のうち、他のトランザクションがコミット(確定)していない未確定の変更データを読み取る現象(ダーティリード)の発生を許容するものはどれでしょうか?

① Read Uncommitted (未コミット読み取り)
② Read Committed (コミット済み読み取り)
③ Repeatable Read (反復可能読み取り)
④ Serializable (直列化可能)

2. 正解:

正解: ① Read Uncommitted(未コミット読み取り)

3. 解説:ロックをかけずにフライング読み込み

トランザクション分離レベルは、複数の処理が同時に動くときの「お互いの独立性の高さ」を表します。レベルが低いほど処理スピード(スルーブット)は上がりますが、不整合が起きやすくなります。

【4つの分離レベルと発生する現象のまとめ】

下に行くほどレベルが高く(厳格に)なり、有害な現象をブロックできます。

1. Read Uncommitted(←ココが正解!
・特徴:他人が書き換えている最中のデータを「お構いなし」に読めます。
・発生する不整合:ダーティリード、ノンリピータブルリード、ファントムリード

2. Read Committed
・特徴:他人がコミットした(確定した)データだけを読みます。
・発生する不整合:ダーティリードを防ぐ(ブロックする)。残り2つは発生。

3. Repeatable Read
・特徴:自分の処理中に、他人がデータを書き換えても自分には見えません。
・発生する不整合:ファントムリード(行が追加される現象)のみ発生。

4. Serializable
・特徴:すべての処理を順番に1つずつ実行するのと同様の状態にします。
・発生する不整合:すべての有害な現象を完璧に防ぎます(最も安全)。
[ 選択肢のひっかけポイント ]
★ ②:Read Committed(コミット済み読み取り)は、名前の通り「コミットされたデータしか読まない」レベルなので、ダーティリードは発生しません。

1. 理解のコツ: 「書類の承認プロセス」をイメージしてください。まだ上司のハンコ(コミット)が押されていない、作成中の下書き書類を勝手にデスクから持ち出して使い始めてしまうレベルがRead Uncommitted(未コミット読み取り)です。書類が後から破棄(ロールバック)されるリスクがありますが、完成を待たずにすぐ動けるのでスピードだけは最速です。
2. 試験対策の視点: 「ダーティリードを許容する」「最も分離レベルが低い」という条件が来たら「Read Uncommitted」が一択です。試験では、この4つの分離レベルと、3大有害現象(ダーティ/ノンリピータブル/ファントム)が「どこまで防げるか」の対応表を丸暗記しておくことが、データベース分野の得点王への近道です。


4. まとめ

「他の処理が確定していないデータでも、お構いなしに読み取ってしまう最も低い分離レベル」。これがRead Uncommittedです。お金の計算など、1円の狂いも許されないシステムでは絶対に選んではいけない設定ですが、多少の誤差が許される統計データの集計など、速度を限界まで追い求めたいケースで限定的に使われます。


【データベース】フライング厳禁!幻のデータを読んでしまう「ダーティリード」|情報処理問題1000本ノック

複数の処理が同時に動くとき、未確定のデータを盗み見てしまうことで発生するバグ。データの一貫性を損なう代表的な現象「ダーティリード」を攻略しましょう。

1. 【 問題 】:同時実行制御における有害現象

【 問題 】 データベースの同時実行制御において、あるトランザクションが更新処理を行ったがまだコミット(確定)していない状態のデータを、別のトランザクションが読み込んでしまう現象を何と呼ぶでしょうか?

① ノンリピータブルリード(非再現可能読み取り)
② ダーティリード(Dirty Read)
③ ファントムリード(幻像読み取り)
④ ライトスキュー(Write Skew)

2. 正解:

正解: ② ダーティリード(Dirty Read)

3. 解説:コミット前の「怪しいデータ」に手を出した結果

ダーティリードの「ダーティ(汚れた)」とは、まだ正式に承認されていない、不正確な状態のデータを指します。これが起きると、システム全体の数字が狂う原因になります。

【ダーティリードが引き起こす最悪のシナリオ】

1. トランザクションAが、口座残高を「1万円」から「5万円」に書き換える(※まだコミットしていない)。
2. トランザクションBが、その書き換えられた「5万円」を読み取って別の処理を始める(これがダーティリード)。
3. その直後、トランザクションAでエラーが発生し、処理がロールバック(取り消し)され、残高は元の「1万円」に戻る。
→ 結果として、トランザクションBは「現実に存在しない(幻の)5万円」をベースに処理を進めてしまい、データが完全に矛盾します。
[ 防ぐための分離レベル ]
★ 最も低いレベルの「Read Uncommitted」では発生してしまいますが、一段階上の「Read Committed(確定データの読み取り)」以上の設定にすれば、このダーティリードは完全に防ぐことができます。

1. 理解のコツ: 「お店のレジ」をイメージしてください。店員さんが商品をカゴに入れながら「合計5,000円です」と画面に出した(未コミット)のを見て、あなたが財布から5,000円を出そうとした瞬間、「あ、すいません、今の商品2倍の値段でした!」と取り消されたような状態です。確定する前の数字を信じて行動すると、トラブルになりますよね。
2. 試験対策の視点: 「コミットされていない変更を読み取る」「ロールバックによって存在しないデータを参照してしまう」という記述があればダーティリードが一択です。3大有害現象(ダーティ、ノンリピータブル、ファントム)の中で最も基礎的であり、真っ先に防ぐべき現象として出題されます。


4. まとめ

「他のトランザクションが確定していない、取り消される可能性のあるデータを読み込んでしまう現象」。これがダーティリードです。これが発生しないよう、現代のほとんどのRDBMSでは、デフォルトでこの現象をブロックする設定(Read Committed以上)になっています。


【データベース】1ミリの狂いも即座に許さない!「強い整合性」|情報処理問題1000本ノック

分散データベースにおいて、「いずれ同じデータになる(結果整合性)」のではなく、「今この瞬間に全員が同じ最新データを共有する」という厳格な一貫性、強い整合性を攻略しましょう。

1. 【 問題 】:データの一貫性モデル

【 問題 】 分散データベースシステムにおいて、あるデータを更新した際、その処理が即座に反映され、それ以降にどのシステムやノードからデータを読み出しても、必ず最新の更新結果が返ってくることを保証する性質を何と呼ぶでしょうか?

① 最終整合性 (Eventual Consistency)
② 弱い整合性 (Weak Consistency)
③ 強い整合性 (Strong Consistency)
④ 因果整合性 (Causal Consistency)

2. 正解:

正解: ③ 強い整合性(Strong Consistency / ストロング・コンシステンシー)

3. 解説:「即座に反映」という絶対のルール

強い整合性は、従来のRDBMSのACID特性における「一貫性」を分散システムでも死守する考え方です。データのズレが許されない金融システムなどで必須となります。

【対比:強い整合性 vs 結果整合性】

■ 強い整合性(Strong Consistency)
特徴:更新したら即座に全体へ反映。どこから読んでも「最新」。
代償:全員の同期を待つため、書き込みの処理速度が落ちたり、通信が途切れた時にシステムが止まりやすい(可用性が下がる)。

■ 結果整合性(Eventual Consistency)
特徴:更新した直後は古いデータが見えるかもしれないが、「いずれ(結果的に)」全員が同じ最新データに追いつく。
利点:同期を待たないので超高速。一部のサーバーが死んでいても動き続けられる。
[ CAP定理との関係 ]
★ 分散システムでは「一貫性(C)」「可用性(A)」「分断耐性(P)」の3つのうち2つしか選べないという「CAP定理」があります。「強い整合性」を選ぶということは、一貫性(C)を最優先にするという意味です。

1. 理解のコツ: 銀行の口座残高をイメージしてください。AATMで現金を振り込んだら、別のBATMやスマホアプリで1秒後に残高を見ても、絶対に振り込み後の金額(最新)になっていなければ困ります。この「いつでもどこでも即座に最新」が強い整合性です。
2. 試験対策の視点: 「結果整合性に対して」「即座に反映を保証」「どのレプリカから読んでも同じ最新値」という表現があれば「強い整合性」が正解です。NewSQLなどの文脈でも非常によく出題されます。


4. まとめ

「更新処理を即座に反映し、常に最新の同一データを保証する特性」。これが強い整合性です。速度や可用性を犠牲にしてでも、データの正確性を最優先にするシステム設計の根幹となる概念です。



### 【データベース】過去の写し鏡で一貫性を保つ!「スナップショット分離」|情報処理問題1000本ノック

データをロックして全員を待たせるのではなく、「処理を始めた瞬間のデータの写真(スナップショット)」を見せることで、超高速と高い整合性を両立する技術を攻略しましょう。

1. 【 問題 】:高度な同時実行制御

【 問題 】 トランザクションの同時実行制御において、各トランザクションが処理を開始した時点のデータベースの「スナップショット(一貫性のある過去のデータ状態)」を読み取ることで、他のトランザクションによる更新操作と衝突(ロックの競合)することなく、一貫した読み取りを可能にする分離レベルはどれでしょうか?

① Read Uncommitted
② スナップショット分離(Snapshot Isolation)
③ Read Committed
④ Serializable (厳格な悲観的ロック)

2. 正解:

正解: ② スナップショット分離(Snapshot Isolation)

3. 解説:「読者」と「筆者」が互いを邪魔しない

スナップショット分離は、MVCC(マルチバージョン同時実行制御)という技術を用いて実現されます。データを上書きするのではなく「古いバージョン」を残しておくことで、読み取り処理に過去のデータを提示します。

【スナップショット分離の3大メリット】

■ 読者は待たない、書く人も待たない
・誰かがデータを激しく更新していても、読み取り側は「自分が開始した時点のデータ」を読めばよいため、ロックによる順番待ちが発生しません。

■ 3大有害現象をすべて防止
・「ダーティリード」「ノンリピータブルリード」「ファントムリード」のすべてが発生しません(※実質的にRepeatable Read以上の堅牢性)。

■ ライトスキュー(Write Skew)という弱点
・非常に特殊なケースで、別々のデータを同時に更新し合うと、お互いのスナップショットが交差して矛盾(ライトスキュー)が起きる場合があります。
[ 現場での採用例 ]
PostgreSQLOracleSQL Server など、現代の主要なRDBMSの多くが、このスナップショット(またはそれに類するMVCCの仕組み)をベースにして、高速かつ安全な並行処理を実現しています。

1. 理解のコツ: 共有ドキュメントをみんなで編集している時、あなたが「印刷(読み取り)」ボタンを押した瞬間の状態がそのまま印刷されるイメージです。印刷中に他の人が内容を書き換えても、あなたの手元の紙(スナップショット)は変わりません。
2. 試験対策の視点: 「開始した時点の」「ロックを伴わない一貫した読み取り」「MVCC」といったキーワードが出たらスナップショット分離です。データベースの性能を落とさずに整合性を保つための超重要技術として出題されます。


4. まとめ

「トランザクション開始時のデータ写真を見せることで、ロックなしで整合性を保つ仕組み」。これがスナップショット分離です。現代の高アクセスなWebシステムを支える、データベースエンジニア必須の教養です。


【データベース】読み取り中の変化を防ぐ!「反復可能読み取り(リピータブルリード)」|情報処理問題1000本ノック

複数のトランザクションが同時に動くとき、どこまでデータの「割り込み」を許すか。4段階ある分離レベルのうち、上から2番目に厳格な「反復可能読み取り」を攻略しましょう。

1. 【 問題 】:トランザクションの分離レベル

【 問題 】 RDBMSのトランザクション分離レベル(アイソレーションレベル)のうち、「ダーティリード」と「ノンリピータブルリード(非再現可能読み取り)」の発生は防ぐことができるが、「ファントムリード(幻像読み取り)」が発生する可能性が残るものはどれでしょうか?

① 既存データの読み取り (Read Uncommitted)
② 確定データの読み取り (Read Committed)
③ 反復可能読み取り (Repeatable Read)
④ 直列化可能 (Serializable)

2. 正解:

正解: ③ 反復可能読み取り(Repeatable Read / リピータブルリード)

3. 解説:同じデータを何度読んでも「同じ」

「反復可能読み取り」という名前の通り、1つのトランザクションの中で同じデータを「反復」して何度読み込んでも、必ず同じ値が返ってくることを保証するレベルです。

【発生する現象の整理(起きない× / 起きる〇)】

ダーティリード:×(発生しない)
 → 他の人が「まだ確定していない(コミット前)」の怪しいデータを読めてしまう現象。
ノンリピータブルリード:×(発生しない)
 → 自分がさっき読んだデータを、他の人に「書き換え・削除」されて値が変わってしまう現象。
ファントムリード:〇(発生する)
 → 自分がデータを範囲検索している最中に、他の人がデータを「新規追加」したため、2回目に検索したときにデータが「幻(ファントム)」のように増えている現象。
[ 試験に出るマトリクス ]
Read Committed:ダーティだけ防ぐ(ノンリピータブルとファントムは起きる)
Repeatable Read:ダーティとノンリピータブルを防ぐ(ファントムだけ起きる
Serializable:すべて防ぐ(完璧だが処理が遅い)

1. 理解のコツ: あなたが本棚の特定の小説(データ)を読んでいる間、他の人がその小説の文字を書き換えることはできません。これが反復可能読み取りです。ただし、他の人が本棚の隙間に「新しい別の本(ファントム)」をコッソリ差し込むことは止められない、というイメージです。
2. 試験対策の視点: 「ダーティとノンリピータブルは発生しない」「ファントムリードは発生する」という組み合わせは、試験でピンポイントに狙われます。英語名の「Repeatable Read」でも選べるようにしておきましょう。


4. まとめ

「自分が処理している間のデータ書き換えは許さないが、新規追加だけは防げないレベル」。これが反復可能読み取り(Repeatable Read)です。多くのRDBMS(MySQLなど)でデフォルトや推奨の設定として採用されている、非常に重要度の高い分離レベルです。


### 【データベース】最強の両立!「NewSQL」|情報処理問題1000本ノック

RDBMSの「信頼性(ACID特性)」と、NoSQLの「圧倒的な拡張性」。これまで両立不可能と言われていた2つの強みを融合した進化系データベースを攻略しましょう。

1. 【 問題 】:次世代データベースの特性

【 問題 】 従来のRDBMS(リレーショナルデータベース)が持つ厳格なトランザクションのACID特性をサポートしながら、NoSQLが持つ優れたスケーラビリティ(拡張性)や高可用性を同時に実現するデータベースの分類はどれでしょうか?

① OODB (オブジェクト指向データベース)
② NewSQL
③ キーバリューストア (KVS)
④ 階層型データベース

2. 正解:

正解: ② NewSQL

3. 解説:「信頼性」と「パワー」のハイブリッド

データベースの世界では長年、「データを絶対に壊さない仕組み(ACID)」をとるか、「サーバーを並べて性能を爆発的に上げる(拡張性)」をとるかのトレードオフがありました。その壁を技術力で突破したのがNewSQLです。

【NewSQLが持つ2つの顔】

■ RDBMSから受け継いだ遺伝子
ACID特性のサポート:金融取引などでも使える、1円の狂いも許さない厳格なデータ一貫性。
SQLが使える:従来のRDBMSと同じ感覚で、複雑なクエリ(検索)を投げられる。

■ NoSQLから受け継いだ遺伝子
高い拡張性(水平スケーリング):アクセスやデータ量が増えても、サーバーを追加するだけで処理能力をリニアに増強できる。
[ 代表的なサービス例 ]
Google Cloud Spanner:世界規模で同期し、絶対に止まらない&狂わないNewSQLの代表格。
CockroachDB:その名の通り「ゴキブリ並みにタフ(死なない)」を掲げるオープンソースのNewSQL。

1. 理解のコツ: 「高級セダンの安全性と乗り心地(RDBMS)」に、「大型トラックの圧倒的な積載量(NoSQL)」を合体させた、モンスターマシンのようなデータベースがNewSQLです。
2. 試験対策 of 視点: 「RDBMSとNoSQLの両方」「拡張性(スケーラビリティ)」「ACID特性のサポート」という全てのキーワードが同時に出てきたらNewSQLが一択です。データサイエンスや高度なWeb開発の文脈でよく問われます。


4. まとめ

「ACID特性と高拡張性を両立した次世代のデータベース」。これがNewSQLです。グローバル展開する大規模なシステムにおいて、データの正確性を1ミリも妥協したくない場面で選ばれる重要な選択肢です。


【データベース】シンプルこそ最強!「キーバリューストア(KVS)」|情報処理問題1000本ノック

複雑な表形式(リレーショナル)ではなく、特定の値を引き出すためだけの究極にシンプルなデータ管理手法、KVSを攻略しましょう。

1. 【 問題 】:データモデルの形式

【 問題 】 データベースのモデルの一つで、任意の保存データ(バリュー)に対して、それを一意に識別するための索引(キー)を対応させて管理する形式を何と呼ぶでしょうか?

① リレーショナルデータベース(RDB)
② キーバリューストア(KVS)
③ ドキュメント指向データベース
④ グラフデータベース

2. 正解:

正解: ② キーバリューストア(Key-Value Store / KVS)

3. 解説:ペアで覚える超高速データベース

KVSは、情報の「検索」と「書き込み」の速さに特化したシステムです。複雑な計算や分析には向きませんが、膨大なアクセスをさばくのに適しています。

【KVSの仕組みと特徴】

■ データ構造
Key(キー):データを特定するための名前やID。
Value(バリュー):中身(数値、文字列、画像など何でもOK)。

■ 主なメリット
とにかく速い:キーを指定すれば即座に中身が取り出せる。
拡張が簡単:データ量が増えても、サーバーを並べるだけで性能を伸ばしやすい(水平分散が得意)。
[ 代表的なツールと用途 ]
Redis:一時的なセッション情報の保持やランキング管理によく使われる。
Amazon DynamoDB:非常に大規模なWebサービスの後ろ側で動いている。

1. 理解のコツ: 銭湯やジムの「下駄箱」をイメージしてください。靴(バリュー)をしまって、その場所を示す番号札(キー)を受け取る。番号札さえあれば、どの靴か迷わず一瞬で取り出せますよね。この仕組みがKVSです。
2. 試験対策の視点: 「一意に識別するキー」「ペア(組み合わせ)」「NoSQL」というキーワードが出たらKVSが正解です。また、RDBのような「表(テーブル)」や「結合(JOIN)」といった概念がないこともセットで押さえておきましょう。


4. まとめ

「一意のキーとデータのペアで情報を管理する形式」。これがKVSです。構造を単純化することで、爆発的なデータ量やアクセス数にも耐えられる、モダンなシステムの裏側を支える重要な技術です。