TensorFlowのような機械学習にはデータベースは必要不可欠です。ただ、このデータベースについての知識がゼロでしたので、まずはRDBMSからNewSQLまでの初心者向けの知識を簡単にまとめてみました。データベースに関わっている人からすれば当たり前の内容です
#RDBMS
RDBMS(リレーショナルデータベース管理システム)は、下記のMySQLなどに代表されるRDB管理のための専用ソフトウェアです。RDBは、データを「行」と「列」からなる2次元の表(テーブル)形式で表し、複数の表と表の間でデータ同士を関連付け(リレーションシップ)を行うことができます。
- MySQL
- PostgreSQL
- MariaDB
- Oracle Databasr
- SQL Server
- DB2
また、汎用的かつ高機能なSQLと呼ばれる言語が使用でき、ACIDなトランザクションが行えることが特徴です。ACIDとは、次の4つの単語の頭文字からとったもので、どの時点でもデータが必ず正しいことが保証されます。これはとくに金融システムにはなくてはならない特性です。
- 原子性(atomicity)
- 一貫性(consistency)
- 独立性(isolation)
- 永続性(durability)
ただ、RDBMSはスケールアウトがしにくく、そのためにコストが高くなる問題があります。通常、パフォーマンスを向上させるためには、スケールアップとスケールアウトの2つの方法があります。スケールアップはコンピュータの性能をハードウェアレベルで向上させるもので、コストが高くなります。スケールアウトはクラスタや大量の安価なPCによる分散処理を行うもので、とくに後者は効率が悪いものの拡張性が高く、コストも安く済みます。スケールアウトの難しさはビッグデータを扱うには非常にコストが高くつく問題です。
また、ACIDのために、1つのプロセスやトランザクションを行うデータには排他処理が行われ、ロールバックやロールフォワードの機能を持ちますが、これらがオーバーヘッドが大きくなる要因にもなってしまいます。他にもRDBMSは画像や音声、動画などの非構造化データに向かない欠点もあります。
#NoSQL
そこでNoSQL(Not Only SQL)が登場します。NoSQLはスケールアウトのしやすさや高速なデータアクセス、スキーマレスなどが特徴で、主に下記の4つにカテゴリー分けされます。
- キーバリュー型(KVS)
- ワイドカラムストア型
- ドキュメント型
- グラフ型
まず、キーバリュー型ですが、多くのNoSQLがKey(キー)を持っていることから、ベース部分はキーバリューに属しているとも言えるかもしれません。データの管理、アクセスはキーに対して行い、そのキーに対してバリューが存在します。高速なパフォーマンスとデータ分散が行えるため拡張性に優れています。とくに、データの読込がRDBと比較して高速であることが特徴です。okuyamaやRiak
、memcached、Redisなどがあります。
ワイドカラムストア型は、列指向とも言われることもありますが、データはRDBのようにレコード(行)で管理されます。アクセスはキーバリューと同じようにキーを使用した列単位となり、複数のカラムを持ます。カラムにネスト構造を持たせられるものもあります。また、テーブルやカラムのスキーマ定義が必要なものもあります。キーバリュー型と比較して検索・集計処理を得意としており、ログデータの分析などに適していると考えられます。Cassandra、HBase
Hypertableなどがあります。
ドキュメント型は、キーに対してバリューではなく、より複雑なドキュメントとしてデータを格納します。JSONやXMLといったデータ記述書式で取り扱うことが可能です。特に、複雑なデータ構造を扱うアプリケーションにおいては、生産性高く柔軟に開発できるメリットがあり、ログ分析やWebシステム、オンラインゲームなどへの利用が考えられます。MongoDBやCouchDBなどがあります。
グラフ型は、グラフ理論に基づき、相互に結びついた要素で構成され、それぞれの間に任意の数の結びつきのあるデータ同士の関係をグラフとして表すのが適切なデータを対象とするように設計されます。グラフ型はFacebookなどで利用されているようです。グラフデータベースは、従来のRDBでは不可能だった形でデータの関係をモデル化し探索するのに役立つように作られており、データをグラフ型で格納した場合、RDBと比較して高速に横断検索をすることが可能です。グラフ型には、Neo4jがあります。
CAP定理
これらのNoSQLですが、ACID特性はなく、下記の3つのキーワードからなるBASEと呼ばれる特性を持ち、厳密な一貫性や即時反映をあきらめることで、スケーラビリティを得ています。
- Basically Available(基本的に利用可能)
- Soft-state(状態の厳密性を追求しない)
- Eventually consistent(最終的に一貫性が保たれればよい)
また、いくつもあるデータベースはCAP定理で分類されており、基本的には一台での利用を除き、下記の3つのうち2つの機能しか満たすことができません。
- Consistency(一貫性)
- Availability(可用性)
- Partition-tolerance(ネットワーク分断耐性)
例えば、CassandraはAP(可用性と分断耐性)を、MongoDBはCP(一貫性と分断耐性)を重視しています。MySQLもCPに属しています。
NewSQL
NoSQLのスケーラビリティを持ちつつ、ACID特性も欲しいというニーズから登場したのがNewSQLです。すでにいくつものプロダクトが登場していますが、スケーラビリティとACID特性を持ち、RDBMSのようにSQLの言語も使用することができます。VoltDBはAKB48総選挙に採用されたことで話題になりました。
- VoltDB
- ScaleDB
- NuoDB
- Clustrix
- FoundationDB
- CockroachDB
なお、MySQLのようにRDBMSにNoSQLの機能を拡張するなども行われており、RDBMSとNewSQLの境界はなくなりつつあります。