応用情報 データベース応用 3 — Questions and Answers
Question 1: CAP定理においてネットワーク分断(Partition)が発生した場合に分散システムが選択できる組み合わせはどれか。
- 一貫性(C)と可用性(A)のどちらかを犠牲にする必要がある (Correct answer)
- 一貫性・可用性・分断耐性の3つを全て保証できる
- 分断耐性のみを諦めれば両方保証できる
- 分断発生時は自動的に全て保証される
Correct answer: 一貫性(C)と可用性(A)のどちらかを犠牲にする必要がある
CAP定理はネットワーク分断(P)が発生した際、分散システムは一貫性(C)か可用性(A)のいずれかを選択しなければならないことを示す。Pが現実に発生するため実質CA vs CPの選択。
Question 2: データベースのウォームスタンバイとホットスタンバイの違いとして正しいものはどれか。
- ホットスタンバイは即座に切り替え可能、ウォームスタンバイは切り替えまで数分かかる (Correct answer)
- ウォームスタンバイの方が高可用性
- 両者は同じ切り替え時間
- コールドスタンバイとホットスタンバイは同じ
Correct answer: ホットスタンバイは即座に切り替え可能、ウォームスタンバイは切り替えまで数分かかる
ホットスタンバイは常に最新状態で即座にフェイルオーバー可能。ウォームスタンバイはデータ同期に若干の遅れがあり切り替えに分単位の時間がかかる。コールドスタンバイは停止状態で待機。
Question 3: SQLのWINDOW関数(分析関数)のROW_NUMBER()の説明として正しいものはどれか。
- パーティション内の各行に対して順番に一意の連続番号を付与する (Correct answer)
- 指定した範囲の行の合計を計算する
- パーティション内の順位を計算し同じ値には同じ順位を付与する
- 現在行から直前行の値との差を計算する
Correct answer: パーティション内の各行に対して順番に一意の連続番号を付与する
ROW_NUMBER()はOVER句で指定したパーティションと順序に基づき各行に1から始まる連続番号を付与する。同値でも異なる番号が付く点がRANK()と異なる。
Question 4: データベースのシャーディング(水平分散)の説明として正しいものはどれか。
- データを複数のDBサーバに水平分割して格納しスケールアウトを実現する (Correct answer)
- 1台のサーバのCPUを増強してスケールアップする
- データを暗号化して複数サーバに分散させる
- バックアップデータを複数のストレージに保存する
Correct answer: データを複数のDBサーバに水平分割して格納しスケールアウトを実現する
シャーディングはデータをシャードキーに基づいて複数のDBサーバに分散格納する技術。大規模なデータを単一サーバで扱えない場合に水平スケールアウトを実現する。
Question 5: 全文検索インデックス(Full-Text Index)の説明として正しいものはどれか。
- テキスト内の単語を転置インデックスで管理しキーワード検索を高速化する (Correct answer)
- 全ての列をインデックス化してどんな検索も高速にする
- 画像や音声ファイルを検索するためのインデックス
- 外部キー制約を管理するインデックス
Correct answer: テキスト内の単語を転置インデックスで管理しキーワード検索を高速化する
全文検索インデックスは文書内の単語→ドキュメントIDの転置インデックスを構築。LIKEの前方一致より効率的で、AND/OR条件や関連度スコアリングも可能。
Question 6: データベース設計でのER図における「多対多(M:N)」の関係を実装する方法として正しいものはどれか。
- 中間テーブル(関連テーブル)を作成して2つの1対多関係に分解する (Correct answer)
- どちらかのテーブルに外部キーを追加するだけで実装できる
- 多対多はリレーショナルDBでは実装不可能
- 配列型のカラムで複数の外部キーを保持する
Correct answer: 中間テーブル(関連テーブル)を作成して2つの1対多関係に分解する
リレーショナルDBは多対多を直接表現できないため、中間テーブル(ブリッジテーブル)を作成し、それぞれのテーブルへの外部キーを持つことで多対多を2つの1対多に分解する。
CAP定理においてネットワーク分断(Partition)が発生した場合に分散システムが選択できる組み合わせはどれか。