少し前からビッグデータという言葉をよく聞きます。
モバイルデバイスが普及することによって、様々な種類のデータを簡単に送受信できるようになりました。
Twitterは1日あたり10テラバイトを超えるデータを扱っているそうです。
このように大量で多種類のデータを扱うためには、それに適したデータ管理の仕組を考える必要があります。
今回は、NoSQLについて以下の観点で解説します。
- ビッグデータとは何か
- NoSQLとは何か
- NoSQLの種類
- NoSQLのメリットとデメリット
ビッグデータとは何か
まず、ビッグデータとは何か説明します。
IBMでは、ビッグデータを「3V」というキーワードを使って説明しています。
3Vとは、「Variety(種類)」、「Volume(容量)」、「Velocity(速度)」の頭文字をとったキーワードです。
それぞれ見ていきましょう。
Variety(種類)
これはデータ形式の多様さを表します。
最近は、数値や文字だけではなく、画像、音声、動画など様々なデータを扱うことが多くなりました。
このようなデータは、データの型や量、データ同士の関係など、その構造を定義することが難しく、構造を定義できる構造化データに対して、非構造化データと呼ばれています。
また、IoTの時代では、人だけではなくセンサーなど物もデータを扱います。
例えば、センサーであれば、そこから得られるデータの形式は各センサー機器に依存しており、取り扱う機器によって数値、テキスト、画像などさまざまな形式があります。
また異なる形式のデータが混在するケースも想定されますので、さまざまな形式のデータを管理することができる必要があります。
Volume(容量)
これはデータ量の多さを表します。
昨今、動画のようにサイズの大きいデータや、センサーやSNSのように発生頻度の高いデータが増えたことにより、大量のデータを管理できる必要性が増しています。
Velocity(速度)
これはデータ処理の速さを表します。
多様で膨大なデータをリアルタイムで分析するためには、データを高速に処理できる必要があります。
NoSQLとは何か
販売データや在庫データなど通常の業務で発生するデータは、データの型や量、データ同士の関係など、その構造を定義できる構造化データが多く、RDBというタイプのデータベースで管理されています。
RDBとはリレーショナルデータベースの略で、データの構造を表形式で定義し、その構造に基づいてデータを保管したり検索したりすることができるデータベースのことです。
RDBにはACIDという特性があります。
ACIDとは、RDBにおける以下の特性をまとめた言葉です。
- 原子性(Atomicity)
- 一貫性(Consistency)
- 独立性(Isolation)
- 永続性(Durability)
分断できないデータ処理(トランザクション)に含まれるタスクが全て実行されるか、あるいは全く実行されないことを保証する性質のことです。
トランザクション開始と終了時にあらかじめ与えられた整合性を満たすことを保証する性質のことです。
トランザクションが他のトランザクションから独立しており順番に実行されることを保証する性質のことです。
トランザクション操作の完了通知をユーザが受けた時点で、その操作は永続的となり、結果が失われないことを保証する性質のことです。
販売データや在庫データなど、会社の業務取引が記録されたデータは、その事実を保証するためにも、このACID特性を維持することがとても重要になります。
さて、RDBでは、データを扱うときSQL(Structured Query Language:構造化照会言語)という言語を使います。
SQLには、データの構造を定義するDDL(Data Definition Language)、データを操作するDML(Data Manipulation Language)、トランザクションを扱うDCL(Data Control Language)があります。
RDBは、SQLによってACID特性を維持する必要があるため、通常業務で発生するような構造化データを扱うのは得意ですが、先に見たような多様で大量の非構造化データを高速に処理するのは不得意です。
そこで、多様で大量なデータを高速に処理するのに適した新しいタイプのデータベースが求められるようになり、NoSQLが登場したのです。
NoSQLはNot only SQLの略で、データはSQL以外でも扱えることを強調した表現です。
NoSQLの種類
NoSQLのデータベースは大きく以下の4つに分けることができます。
キーバリュー型
データを、データを識別する鍵(キー)と、それに対する値(バリュー)で扱う、非常にシンプルなタイプのデータベースです。
代表的なデータベースには
Redis
があります。
カラム指向型
RDBが行単位でデータを扱うのに対し、カラム指向型は、データを1列(カラム)単位で扱います。
なので、1行単位でデータを追加、削除するような処理は苦手ですが、データを列単位で扱う集計処理などは得意です。
なお、カラム指向型のデータベースは、データを構造化していないので、列を自由に追加することができます。
なので、行が異なると列も異なる場合があります。
代表的なデータベースには
Cassandra
HBase
があります。
ドキュメント指向型
XMLやJSONなどのように半構造化されたドキュメント形式のデータを扱うデータベースです。
なので、XMLやJSONを扱うアプリケーションは、そのデータをそのままの形式で管理することができるので便利です。
なお、カラム指向型では列の意味が規定されますが、ドキュメント指向では列の意味が規定されず、異なる種類の列も扱うことができます。
代表的なデータベースには
MongoDB
CouchDB
があります。
グラフ型
ノード、エッジ、プロパティから構成されるグラフ構造でデータを格納するデータベースです。
Facebookの友達関係の追加や削除など、ネットワークを扱うアプリケーションで使うと便利です。
代表的なデータベースには
Neo4j
があります。
NoSQLのメリットとデメリット
NoSQLのメリット
まず、NoSQLのメリットですが、それは、多様で大量の非構造化データを高速に処理することができることです。
上述したNoSQLの種類のデータベースを見てもわかるように、NoSQLは、多様なデータに柔軟に対応できるシンプルな構造になっています。
また、シンプルな構造ゆえに、大量のデータを高速に処理することができます。
また、NoSQLの場合、安価なサーバーをたくさんつなげて並列処理させることでパフォーマンスを向上させることができます。
このようにサーバの数を増やしていくことで処理性能の向上を狙う手法を「スケールアウト」と呼びます。
RDBの場合、並列処理のために複数のサーバへデータを分散させてしまうと、全体の整合性を確保するのが難しくなります。
なので、RDBの場合、サーバーの数を増やすのではなく、サーバをより高性能なものに換える、あるいはメモリやプロセッサを増設することでサーバの性能を高める手法を使うのが一般的です。
このようにサーバ単体の性能を向上させてソフトウェアの処理性能を上げる手法を「スケールアップ」と呼びます。
スケールアップで性能を向上させようとすると、限界が来てしまいます。
世の中にある最も高速なサーバを導入してしまったら、それ以上は技術革新が起こらない限り、性能が上がることはありません。
一方、スケールアウトならば、上手に並列処理ができるようにプログラムを作ってあれば、サーバの台数を増やせば増やすほど性能が上がっていきます。
NoSQLのデメリット
次に、NoSQLのデメリットですが、それは、ACID特性を維持する機能が弱いことです。
ここでCAP定理を紹介します。
CAP定理とは、クラウドサービスを始めとする情報システム(ネットワークでつながった、共通のデータを持つ、一連のノード群)において、以下の3つの要件を同時に満たすことができないというものです。
- Consistency(一貫性)
- Availability(可用性)
- Partition Tolerance(分断耐性)
誰かがデータを更新したら必ず更新後のデータを参照できる。
常に読み出しと書き込みができる。
ネットワークが分断されても間違った結果を引き起こさない。
CAP定理でいうと、RDBはACID特性によりConsistency(整合性)とAvailability(可用性)を満たすことを特徴とし、NoSQLはAvailability(可用性)とPartition Tolerance(分断耐性)を満たすことを特徴としています。
以上、今回は、NoSQLについて解説しました。
[…] 31;整合性など複雑な機能を持たないNoSQLは、通常、このパターンで、複数 […]
[…] 5351;します。 NoSQLについては、記事NoSQLとは何かを参照してください。 【動画&# […]