基本情報技術者 2019年 春期 午前(科目A) 問30
問題文
ビッグデータの処理で使われるキーバリューストアの説明として、適切なものはどれか。
選択肢
ア:“ノード”、“リレーションシップ”、“プロパティ”の3要素によってノード間の関係性を表現する。
イ:1件分のデータを“ドキュメント”と呼び、個々のドキュメントのデータ構造は自由であって、データを追加する都度変えることができる。
ウ:集合論に基づいて、行と列から成る2次元の表で表現する。
エ:任意の保存したいデータと、そのデータを一意に識別できる値を組みとして保存する。(正解)
🔒 解説は解答すると表示されます
キーバリューストア【午前解説】
正解の理由
選択肢の中で、キーとそれに対応する値を「組」として保存する説明が該当するため、正解は エ です。
キーバリューストアは「キーで一意に識別されたエントリ(値)を格納」するモデルであり、値の構造に制約がなくバイナリデータやシリアライズ済みオブジェクトも扱えます。これにより高速な読み書きとスケールアウトが可能となり、ビッグデータ用途で採用されます。
キーバリューストアは「キーで一意に識別されたエントリ(値)を格納」するモデルであり、値の構造に制約がなくバイナリデータやシリアライズ済みオブジェクトも扱えます。これにより高速な読み書きとスケールアウトが可能となり、ビッグデータ用途で採用されます。
解法ステップ
- 問題文で注目すべきキーワードを探す:「キー」「値」「一意識別」などの語句を確認します。
- 各選択肢をDBモデルの特徴に照らし合わせる:グラフ/ドキュメント/リレーショナル/キー・バリューそれぞれの代表的記述を思い出します。
- 最も単純に「キーと値の組で保存」と説明している選択肢を選ぶ:それがキーバリューストアの本質です。
- 迷ったら「クエリの柔軟性(スキーマ)」「主要要素(ノード等)」で除外していきます。
選択肢別の誤答解説
- ア: “ノード”、“リレーションシップ”、“プロパティ”の3要素によってノード間の関係性を表現する。
→ これはグラフデータベース(例:Neo4j)の特徴で、キーバリューストアとは異なります。グラフは関係性の表現と経路探索が得意です。 - イ: 1件分のデータを“ドキュメント”と呼び、個々のドキュメントのデータ構造は自由であって、データを追加する都度変えることができる。
→ これはドキュメント指向データベース(例:MongoDB、CouchDB)の説明で、KVより複雑な構造の文書データを格納・クエリできます。 - ウ: 集合論に基づいて、行と列から成る2次元の表で表現する。
→ これはリレーショナルデータベース(RDBMS)の説明です。行列構造や正規化・関係演算が特徴でKVとは設計思想が異なります。 - エ: 任意の保存したいデータと、そのデータを一意に識別できる値を組みとして保存する。
→ 正解。キー(識別子)と値(任意データ)をペアで保存するという定義はキーバリューストアそのものです。
よくある誤解
- 「ドキュメントとキーバリューは同じ」と考える誤解:両者は近いがドキュメントは構造化(JSONなど)でクエリが可能、KVは単純なキー参照が中心です。
- 「グラフDBの要素説明を見てキーバリューと思う」:ノード・リレーションシップ・プロパティはグラフDB固有の概念で、KVとは別物です。
- 「RDBの表(行列)形式がキーバリューだ」と混同する:行と列の2次元表はリレーショナルや列指向データベースの説明です。
補足コラム
- 代表的なキーバリューストアには Redis、Memcached(インメモリ)、Amazon DynamoDB、Riak などがあり、用途に応じて永続化や分散特性を選べます。
- KVの利点:シンプルなAPI(get/put/delete)による高速アクセス、水平スケール、柔軟な値の取り扱い。短所:複雑な検索や結合、部分的なフィールド検索は苦手で、キー以外でのクエリが必要なら別のDBが向きます。
- 実用例:セッションストア、キャッシュ、構成情報の保存、インデックスや簡易データの高速参照などに適しています。
コード例(Pythonの辞書でKVイメージ):
# 簡単なキーバリューストアのイメージ
kv_store = {}
# 保存
kv_store["user:1001"] = {"name":"山田太郎", "age":30}
# 取得
user = kv_store.get("user:1001")
print(user) # {'name': '山田太郎', 'age': 30}
# 削除
kv_store.pop("user:1001", None)
FAQ
Q1: キーバリューストアとドキュメントDBはどう使い分けますか?
A1: キーで高速参照が主目的ならKV、JSONのフィールド単位で検索や部分更新を多用するならドキュメントDBが向きます。
A1: キーで高速参照が主目的ならKV、JSONのフィールド単位で検索や部分更新を多用するならドキュメントDBが向きます。
Q2: キーバリューストアはトランザクションをサポートしますか?
A2: 実装によります。Redisは単一コマンド原子性やトランザクション機能(MULTI/EXEC)を持ちますが、分散トランザクションの保証はDBごとに異なります。
A2: 実装によります。Redisは単一コマンド原子性やトランザクション機能(MULTI/EXEC)を持ちますが、分散トランザクションの保証はDBごとに異なります。
Q3: 大量データの集計はKVでやるべきですか?
A3: 単純集計やキーごとの集計は可能ですが、複雑な分析や結合処理は列指向DBやデータウェアハウス、分散処理フレームワークが適しています。
A3: 単純集計やキーごとの集計は可能ですが、複雑な分析や結合処理は列指向DBやデータウェアハウス、分散処理フレームワークが適しています。
関連キーワード: キーバリューストア、キー・バリュー、NoSQL、Redis、DynamoDB、ドキュメント指向DB、グラフDB、列指向DB、スケーラビリティ、CAP定理、キャッシュ、データモデリング

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

