Help us understand the problem. What is going on with this article?

データベース事始め

More than 3 years have passed since last update.

TensorFlowのような機械学習にはデータベースは必要不可欠です。ただ、このデータベースについての知識がゼロでしたので、まずはRDBMSからNewSQLまでの初心者向けの知識を簡単にまとめてみました。データベースに関わっている人からすれば当たり前の内容です :sweat_smile:

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の境界はなくなりつつあります。

参考

データベースの基本と最新動向
会社とデータストアと私

AkitsuguHirano
ゲーム開発者
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away