全6903文字
PR

 企業が導入したシステムにおいて、これまで「データベース」といえばRDB(リレーショナルデータベース)を指すことが多かったと思います。データベースを学ぼうとする人は、各データベース製品は自社で使用している、または無償でダウンロードできるRDBを選んでPCにインストールして環境を作成し、データベースを操作する言語としてSQLを学習するといったパターンが主流だったと思われます。しかし最近はデータの多様化と大容量化が進んでおり、RDBでは扱えない(扱いにくい)タイプのデータが増えてきています。

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

 RDBで扱いにくいデータとはどのようなものでしょうか。

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

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

 しかし今日、システムの設計当初は問題なかったとしても、ビジネス要件の変化に対応するためにデータ構造が変更されることがあります。例えば列のデータに桁あふれが生じてしまいデータ型の拡張が発生するケースや、テーブルへの列の追加では対応できずに新しいテーブルに分割するケースなどがあります。

 また、新しく立ち上げるサービスの場合、事前にデータ構造が把握できない状況が発生します。こうした場合にRDBを採用していると、変更のたびにテーブル設定の見直しが必要となり、修正に多大な工数が取られます。

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

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

 半構造化データとは、ある程度データ構造が決まっているものの、構造を柔軟に変更できるデータを指します。JSON(JavaScript Object Notation)やXML形式のデータが、半構造化データに該当します。半構造化データのように、事前にデータ構造を定義する必要がないことを「スキーマレス」と呼びます。スキーマレスのメリットとして、データ型が固定でないため、格納するデータにあわせて自由に変更できる点があります。

 非構造化はそもそもデータ構造を持たないため、データベースに格納するために特別な設定をすることはありません。データレイクのようなストレージに保存するか、どうしてもデータベースに保存しておきたい場合はバイナリーデータを格納できるLOB(Large Object)型に格納します。

 問題は半構造化データの存在です。従来のRDBでは扱いにくいが、システムのデータ分析に必要なのでなんとかして活用したい――。その選択肢の1つとして登場したのがNoSQLです。