応用情報技術者試験過去問を解いてみた R6年度 春期 問29

応用情報技術者試験

はじめに

今回も、応用情報技術者試験の過去問を解いていきます。

今回のテーマは、ビッグデータの基盤技術として利用されるNoSQLデータベースです。

IoTやSNS、Webサービスなどの発展によって、現在では大量かつ多様なデータが生成されています。

また、大規模なWebサービスでは、大量のアクセスに対応したり、多数のサーバーへデータを分散して処理したりする必要もあります。

こうした要求に対応するため、従来のリレーショナルデータベース(RDB)とは異なる特徴を持つNoSQLデータベースが広く利用されるようになりました。

今回は、NoSQLとは何なのかも含めて問題を見ていきます。


問題

ビッグデータの基盤技術として利用されるNoSQLに分類されるデータベースはどれか。

選択肢内容
関係データモデルをオブジェクト指向データモデルに拡張し,操作の定義や型の継承関係の定義を可能にしたデータベース
経営者の意思決定を支援するために,ある主題に基づくデータを現在の情報とともに過去の情報も蓄積したデータベース
様々な形式のデータを一つのキーに対応付けて管理するキーバリュー型データベース
データ項目の名称,形式など,データそのものの特性を表すメタ情報を管理するデータベース

解答

正解は「ウ」です。

様々な形式のデータを一つのキーに対応付けて管理するキーバリュー型データベースは、NoSQLの代表的なデータモデルの一つです。

解説

NoSQLとは、従来のRDBとは異なるデータモデルや設計思想を採用する、主に非リレーショナルなデータベース技術群の総称です。

代表的なものとして、

  • キーバリュー型
  • ドキュメント型
  • カラムファミリー型
  • グラフ型

などがあります。

今回の問題で登場しているのは、この中のキーバリュー型です。

基本的な構造は非常にシンプルです。

Key → Value

例えば、

user001 → ユーザーAの情報
user002 → ユーザーBの情報
product001 → 商品Aの情報

というように、KeyとValueを対応付けてデータを管理します。

したがって、選択肢ウが正解です。

NoSQLはなぜ広まったのでしょうか

ここで少し背景を見てみます。

以前から企業システムでは、RDBが広く利用されてきました。

例えば顧客情報なら、次のような表を作ります。

顧客ID氏名年齢住所
001田中30東京
002佐藤40大阪

注文情報を別のテーブルにすれば、

注文ID顧客ID商品
A001001パソコン
A002001マウス
A003002キーボード

顧客IDを利用して顧客と注文を関連付けることができます。

顧客テーブル

田中(001)
    │
    ├── パソコン
    └── マウス

佐藤(002)
    │
    └── キーボード

RDBは、このようにデータを表形式で整理し、SQLによって検索したり、複数のテーブルをJOINしたりすることを得意としています。

ところが、インターネットサービスが巨大化すると状況が変わってきます。

従来

販売データ
顧客データ
在庫データ
     ↓
    RDB


Webサービスの巨大化

SNS投稿 ──────  ┐
画像 ─────────┤
動画 ─────────┤
アクセスログ ──    ┤
位置情報 ──────  ┤
IoTデータ ─────  ┤
                   ↓
       大量・多様なデータ

データ量だけでなく、世界中からの大量アクセスにも対応しなければならなくなりました。

そこで重要になってきたのが、複数のサーバーを利用して処理能力を拡張する「スケールアウト」という考え方です。

1台のサーバーを強化する

        ↓

┌────────┐
│     DB     │
└────────┘


だけではなく


複数サーバーに分散する

┌────┐ ┌────┐ ┌────┐
│ DB   │ │  DB  │ │  DB  │
└────┘ └────┘ └────┘

こうした大規模な分散環境で利用しやすいデータストアが発展していきました。

代表的な流れとして、Googleは2006年にBigtable、Amazonは2007年にDynamoについて論文を発表しています。

その後、2000年代後半には、RDBとは異なるデータモデルを持つさまざまなデータベースがNoSQLとして広く注目されるようになりました。

流れを簡単にまとめると次のようになります。

Webサービスが巨大化
        ↓
大量のデータ
        +
大量アクセス
        +
多様なデータ
        ↓
複数サーバーに
分散して処理したい
        ↓
RDBとは異なる特徴を持つ
データベースも利用される
        ↓
      NoSQL

ただし、

「RDBが古くなったのでNoSQLに置き換わった」

という意味ではありません。

RDBとNoSQLは現在でも用途に応じて使い分けられています。

RDBとNoSQLの違い

両者を大まかに比較すると次のようになります。

項目RDBNoSQL
主なデータモデル表(行・列)Key-Value、文書、グラフなど
スキーマ明示的に定義するのが基本柔軟なものが多い
JOIN標準的に利用できますJOINを前提としない製品も多いです
トランザクション強力な機能を持つ製品が多いです製品によって異なります
水平分散対応可能です水平分散を重視した製品が多いです
得意な用途複雑な検索、関係性、取引処理など大規模分散、特定のアクセスパターンなど

NoSQLだから必ずRDBより速い、あるいはRDBだから必ずNoSQLより整合性が高い、と単純に分けられるものではありません。

製品や設計によって特徴は異なります。

重要なのは、

「RDBとNoSQLにはそれぞれ得意な用途がある」

ということです。

RDBにも「キー」があるのに何が違うのか

キーバリュー型という名前を見ると、一つ疑問があります。

RDBにも、

  • 主キー
  • 外部キー

があります。

では、RDBのキーとキーバリュー型のKeyは何が違うのでしょうか。

RDBの場合、主キーはテーブルの行を一意に識別するために使用します。

また、外部キーによって別のテーブルとの関係を表すこともできます。

【顧客テーブル】

顧客ID
001 田中
 ↑
 │
 │ 関連付け
 │
 ↓
【注文テーブル】

注文ID 顧客ID
A001   001
A002   001

つまりRDBでは、

テーブルという基本構造があり、その中でキーを利用しています。

一方、キーバリュー型では、

Key → Value

という対応そのものがデータモデルの基本です。

user001 → 田中さんのデータ
user002 → 佐藤さんのデータ
user003 → 鈴木さんのデータ

例えば、

user001

というKeyを指定すると、

{
  名前:田中,
  年齢:30,
  住所:東京
}

というValueを取得する、といった使い方をします。

つまり、

「NoSQLではキーを使う」ことが特徴なのではありません。

RDBにもキーは存在します。

キーバリュー型の特徴は、

「KeyとValueの対応そのものが基本的なデータ構造になっている」

という点です。

キーバリュー型はロッカーで考えると分かりやすいです

キーバリュー型は、巨大なロッカーをイメージすると分かりやすいです。

┌────────────────┐
│ user001                │ → 田中さんのデータ
├────────────────┤
│ user002                │ → 佐藤さんのデータ
├────────────────┤
│ product001             │ → 商品データ
├────────────────┤
│ session12345           │ → セッション情報
└────────────────┘

ロッカー番号がKey

ロッカーの中身がValueです。

欲しいデータのKeyが分かっていれば、

user001
   ↓
データベース
   ↓
田中さんのデータ

という形でデータを取得できます。

このような単純なアクセスパターンによって、高速な読み書きを実現しやすく、水平分割やスケールアウトを重視した製品も多く存在します。

各選択肢の解説

ア:オブジェクト指向データベース

関係データモデルをオブジェクト指向データモデルに拡張し、操作の定義や型の継承関係の定義を可能にしたデータベース

これはオブジェクト指向データベース(OODB)について説明しています。

オブジェクト指向プログラミングで利用される、

  • オブジェクト
  • クラス
  • 継承

などの概念を利用してデータを扱います。

クラス
   │
   ├─ 属性
   └─ 操作
        │
        ↓
       継承

今回問われているキーバリュー型NoSQLではないため、不正解です。

イ:データウェアハウス(DWH)

経営者の意思決定を支援するために、ある主題に基づくデータを現在の情報とともに過去の情報も蓄積したデータベース

これはデータウェアハウス(DWH)の説明です。

データウェアハウスは、様々な業務システムからデータを集め、分析や意思決定に活用するためのデータ基盤です。

販売システム ─┐
在庫システム ─┤
顧客システム ─┤
              ↓
     データウェアハウス
              ↓
          分析・BI
              ↓
          意思決定

特徴を整理すると次のようになります。

項目内容
目的分析・意思決定支援
データ現在および過去のデータを蓄積
用途BI、集計、分析など

問題文の、

「意思決定を支援」

「過去の情報も蓄積」

が見分けるポイントです。

NoSQLの説明ではないため、不正解です。

ウ:キーバリュー型データベース【正解】

様々な形式のデータを一つのキーに対応付けて管理するキーバリュー型データベース

これはキーバリュー型NoSQLデータベースの説明です。

基本構造は、

Key → Value

です。

例えば、

KeyValue
user001ユーザー情報
user002ユーザー情報
product001商品情報

というようにデータを管理します。

代表的な製品・サービスとして、

  • Redis
  • Amazon DynamoDB

などがあります。

キーバリュー型は、キーによる単純な読み書きを高速に処理しやすく、大規模なデータや大量アクセスを扱う用途でも利用されています。

したがって、ウが正解です。

エ:データディクショナリ・リポジトリ

データ項目の名称、形式など、データそのものの特性を表すメタ情報を管理するデータベース

これはメタデータを管理する仕組みについて説明しています。

メタデータとは、

「データについてのデータ」

です。

例えば次のようなものがあります。

データ項目メタデータの例
氏名文字列
年齢数値
登録日日付型

例えば、

データ:顧客情報

そのデータについての情報
・項目名
・データ型
・桁数
・意味
・格納場所

といった情報がメタデータです。

こうしたメタデータを管理する仕組みとして、データディクショナリやリポジトリがあります。

NoSQLの説明ではないため、不正解です。

問題の用語解説

NoSQL

NoSQLとは、RDBとは異なるデータモデルや設計思想を採用する、主に非リレーショナルなデータベース技術群の総称です。

代表的な種類には次のものがあります。

種類特徴
キーバリュー型KeyとValueのペアで管理
ドキュメント型JSONなどの文書単位で管理
カラムファミリー型行キーと列の集合などを利用して柔軟に管理
グラフ型ノードとエッジによってデータ同士の関係を表現

キーバリュー型

KeyとValueの組み合わせでデータを管理する方式です。

Key → Value

という非常にシンプルな構造が基本です。

ドキュメント型

JSONなどに代表される、文書形式のデータを単位として管理します。

例えば、

{
  "name": "田中",
  "age": 30,
  "address": "東京"
}

といったデータを一つのドキュメントとして扱います。

カラムファミリー型

行キーと列の集合などを利用してデータを管理する方式です。

「列単位で保存するデータベース」とだけ覚えると、分析系の列指向データベースと混同しやすいため注意が必要です。

グラフ型

データをノード、データ同士の関係をエッジとして表現するデータベースです。

田中
 │
 │ 友人
 ↓
佐藤
 │
 │ 勤務先
 ↓
会社A

SNSの人間関係など、データ同士のつながりを扱う処理に向いています。

体系的位置づけ

今回の問題をデータベース分野の中で整理すると、次のようになります。

データベース
│
├─ RDB
│   │
│   ├─ テーブル
│   ├─ 主キー
│   ├─ 外部キー
│   ├─ SQL
│   └─ JOIN
│
└─ NoSQL
    │
    ├─ キーバリュー型 ← 今回
    ├─ ドキュメント型
    ├─ カラムファミリー型
    └─ グラフ型

さらにNoSQLが広まった背景まで含めると、

RDBが広く利用される
        ↓
Webサービスが巨大化
        ↓
大量データ
大量アクセス
データの多様化
        ↓
分散処理・スケールアウトの
必要性が高まる
        ↓
RDBとは異なる特徴を持つ
データベースも広く利用される
        ↓
NoSQL
        ↓
その代表的な方式の一つ
        ↓
キーバリュー型

という流れになります。

今回の問題の重要ポイント

今回、押さえておきたいポイントは3つあります。

1.NoSQLはRDBの後継ではない

NoSQLが登場したからといって、RDBが不要になったわけではありません。

RDBとNoSQLにはそれぞれ得意な用途があり、現在でも用途に応じて使い分けられています。

2.キーバリュー型は「Key → Value」が基本

キーバリュー型では、

Key → Value

という対応そのものが基本的なデータ構造です。

一方、RDBではテーブルが基本構造であり、主キーや外部キーは行を識別したりテーブル同士を関連付けたりするために利用します。

同じ「キー」という言葉が出てきますが、データモデルの中での役割が異なります。

3.「ビッグデータ」という言葉だけでNoSQLと判断しないようにする

ビッグデータに関連する技術には、NoSQL以外にも様々なものがあります。

そのため、

「ビッグデータだからNoSQL」

と判断するのではなく、

今回の問題であれば、

「一つのキーに対応付けて管理する」

という表現から、

Key → Value
      ↓
キーバリュー型
      ↓
NoSQL

と判断することが重要です。

まとめ

今回の問題では、NoSQLに分類されるデータベースが問われました。

正解は、

ウ:キーバリュー型データベース

です。

キーバリュー型では、

Key → Value

というシンプルな構造でデータを管理します。

ここで注意したいのは、

「NoSQLだからキーを使う」わけではない

ということです。

RDBにも主キーや外部キーがあります。

違いは、

RDB

テーブルが基本
      ↓
キーを使って
行を識別したり
表同士を関連付けたりする


キーバリュー型

Key → Value
      ↑
この対応そのものが
基本的なデータ構造

という点です。

また、NoSQLについては、

Webサービスの巨大化
        ↓
大量データ・大量アクセス
        ↓
分散処理やスケールアウトの
重要性が高まる
        ↓
RDBとは異なる特徴を持つ
データベースも利用される
        ↓
NoSQL

という背景まで理解しておくと、単なる用語暗記よりも記憶に残りやすくなります。

今回の問題では、

「一つのキーに対応付けて管理」→「キーバリュー型」→「NoSQL」

という流れを押さえておきたいです。


参考情報

コメント

タイトルとURLをコピーしました