全4011文字

データの多様化と大容量化が進み、RDBでは扱いにくいタイプのデータが増えている。半構造化データを分析に活用したい場合の選択肢の1つがNoSQLデータベースである。NoSQL DBは「結果整合性」の考えで実装されており、スケールアウトで性能向上を図る。

 企業が導入したシステムにおいて、これまでデータベースといえばほとんどの場合、リレーショナルデータベース(RDB)を指していました。しかし最近はデータの多様化と大容量化が進み、RDBでは扱えない(扱いにくい)タイプのデータが増えています。

システムを取り巻く様々なデータ

 RDBでは扱いにくいデータとはどのようなものでしょうか。RDBに格納するデータは構造化されたデータ(Structured Data)です。Excelの表のように行と列で表すテーブル形式のデータのことです。列には事前にデータ型が定義されており、型に合わないデータは格納できません。特定の列に格納できるデータ型があらかじめ決まっているため、プログラミングをする開発者からすれば扱いやすく、データを加工しやすいメリットがあります。

 RDBはデータを格納するため、事前にデータエンジニアがテーブル構造を設計する必要があります。テーブルの列のデータ型だけでなく、テーブルごとに重複したデータを持たないようにテーブルを分割する作業も必要です。この作業を正規化といいます。正規化したデータは、テーブル間でデータが重複せず、データの整合性を保てます。データ構造が明確に決まっているため、事前に予測できるデータを格納する場合には便利です。

 しかし今日、設計当初は問題なかったとしても、ビジネス要件の変化に対応するためにデータ構造を変えることがあります。例えば列のデータに桁あふれが生じてデータ型が拡張するケースや、テーブルへの列の追加では対応できずに新しいテーブルに分割するケースなどです。新しく立ち上げるサービスでは、事前にデータ構造が把握できない状況も発生します。こうした場合にRDBだと、変更のたびにテーブル設定の見直しが必要となり、修正に多大な工数がかかります。

 データの種類には構造化データの他、非構造化データ(Unstructured Data)と半構造化データ(Semi-Structured Data)があります。非構造化データとは、動画・音声のようなバイナリーデータや、メールなど構造の定義を持たないデータを指します。

表 データの分類
システムで扱うデータの種類は様々
表 データの分類
[画像のクリックで拡大表示]

 半構造化データとは、ある程度データ構造が決まっているものの、構造を柔軟に変更できるデータを指します。JSON(JavaScript Object Notation)やXML形式のデータが、半構造化データに該当します。

 非構造化データはデータ構造を持たないため、データレイクのようなストレージに保存するか、どうしてもデータベースに保存しておきたい場合はバイナリーデータを格納できるLOB(Large Object)型に格納します。問題は半構造化データです。RDBでは扱いにくいが、データ分析に必要なのでなんとか活用したい――。その選択肢として登場したのがNoSQLです。