データベースの種類

世の中には数多くのデータベースが存在します。この記事ではデータベース全体像についてざっくりと説明していきます。

どのようなタイプのデータベースが存在するのか。どのような場面で各種データベースが利用されているのか。具体的にイメージしやすいよう書いていきたいと思います。

RDBMS

RDBMSとは、Relational DataBase Management System(リレーショナルデータベース管理システム)の略です。

RDBMSの歴史をたどると1つの論文にたどり着きます。当時IBMに所属していたEdgar F.Codd博士が1970年に発表した『A Relational Model of Data for Large Shared Data Banks 』(大規模共有データバンクのためのリレーショナルモデル)です。

リレーショナルモデル

Codd博士はこの論文において「リレーショナルモデル」というデータモデルを提唱しています。データモデルとは、データをどういう形で格納するか、格納したデータに対してどう操作するかを定める論理体系で、いわばデータベースの骨組みです。

リレーショナルモデルのデータ表現は「列」と「行」から成る「表」によって表されます。表イメージの例として簡単な従業員表を記載しておきます。

表1:従業員表

社員番号 名前 部署
00012 佐藤太郎 営業部
00013 山田次郎 開発部
00014 鈴木一郎 経理部

このような表によってデータを管理するデータベースのことをRDBMSと呼びます。また、データを操作する言語としてSQLが用いられています。

NoSQL

インターネットの普及、回線やCPUなどのハードウェアの進化、システムの複雑化などによって、扱うデータは膨大かつ複雑になりました。

そのため、RDBMSに合わせてデータを整理して格納するということが難しくなりました。NoSQLはそういったRDBMSでは対応しきれない問題を解決するために求められてきたという経緯があります。

Not Only SQL

NoSQLはNot Only SQLの略称です。RDBMSでは操作言語としてSQLがISOによって標準化されています。そのため、どのRDBMSでもSQLによって操作することができます。

一方でNoSQLはSQLで操作できないデータベースもあります。(厳密にはNot ONly SQLですので、SQLで操作可能なNoSQLデータベースも存在します。)

RDBMSではリレーショナルモデルというデータモデルを採用していました。NoSQLは異なるデータモデルを採用しています。

表2:NoSQLのデータモデル

NO. データモデル データベース製品
1 キーバリュー型(KVS) memcashed,Redis
2 ドキュメント型 MongoDB,DymnamoDB
3 カラムファミリー型 HBase,Cassandra
4 グラフ型 Neo4j,Cypher

NoSQLの各種データモデルを解説

それでは、各種データモデルの概要について解説していきます。本記事では、細かい部分までは言及せず全体像が掴めるように努めております。

1.キーバリュー型(KVS)

実はキーバリューというワードより、KVSというワードの方が頻繁に出てきます。KVSとは、キーバリューストア(Kye-Value Store)の略で、膨大な情報を保存するのに適したデータ保存形式のひとつです。

主な特徴

  • データモデルがシンプルである
  • スケールアウトに適した構造をしている
  • 高速でデータの読み書きが可能
  • 分散処理に適している
  • トランザクション処理できないものが多い

主な事例としては、誰でも知っているFacebook、YouTube、Twitterです。特定のユーザーやキーワードによる検索などを行った場合、瞬時に応答してくれます。実は内部でKVSが活躍していたのです。

参考

ドキュメント型

ドキュメント型データベースとは、保存するデータ構造が自由なデータベースです。一件分のデータはドキュメントと呼ばれ、JSONやXMLなどの記述書式で書かれたデータが保存されます。

ドキュメント型データベースは、「Sharding」という仕組みに対応していることが多いです。Shardingでは、多数のコンピュータをネットワークで接続し、それらの間で情報を特に共有しないで分散処理を行う仕組みで、サーバーを増やすだけで性能を上げることができます。

そのため、大量のデータを扱うシステムに向いています。その代わり、KVSと同様にトランザクションを犠牲にしています。

主な特徴

  • データを自由な形式で保存する(事前にテーブルの構造を決める必要がない)
  • 比較的簡単にスケールアウトできる
  • トランザクション処理を犠牲にしている

主な事例としては、オンラインゲーム各社、保険業界ではMetLifeなど、NoSQLの中では非常にユーザーが多いデータベースです。

参考

カラムファミリー型

Cassandraのデータは非常にシンプルなデータモデルを持っています。データはすべて4次元または5次元の連想配列のようになっています。簡単なイメージで説明しますと、ブログのプロフィールページを想像してみてください。

key column
id name value timestamp
00001 名前 リチウム 20190201113021001
年齢 32歳 20190201113022112
仕事 ITエンジニア 20190201113023431

表のように一つのカラム(名前・年齢・仕事)に各データが格納されています。そして、一つのkey(id)に紐づくカラムの集合をカラムファミリーと言います。カラムファミリーは一つのkey(id)によって特定することができます。

NoSQLの中でも強い整合性を実現しつつ、データ分散もできるデータベースです。

主な特徴

  • 強い整合性とCAS操作をサポート
  • 自動シャーディングによるデータ分割
  • フェイルオーバー可能なマスタ

主な事例としては、サイバーエージェントのAmeba Smart Phone Platformで採用されています。

参考

グラフ型

グラフデータベースとは、NoSQLの中では新しい、まさにこれからのデータベースです。ざっくり言いますと、データとデータの「つながり」を中心としたデータベースです。

グラフデータベースは、SNSにとっては最適なデータベースと言えるでしょう。友達の友達という探索ができるほか、同じ趣味を持った人を検索したりすることができます。

マーケティング広告などの、とくにECサイトなど購買行動が関係する際にも有効です。「スポーツ」をフォローしている3人の顧客ユーザーがおり、そのうち2人が実際に製品を購入したので、残りの1人も製品を購入するかもしれない。そのユーザーがログインしたECサイトのページには、「これを購入された方は、こちらも購入されています」と表示されるようにできます。

グラフデータベースに関しては、以下の2つのサイトの説明が非常に分かりやすかったですので、もっと知りたいという方は是非読んでみてください。

参考

データベースの種類

世の中には本当にたくさんのデータベースが存在します。私はこれまでに、oracleやMySQL、SQLServerといったRDBMSしか触ったことがありませんでした。

しかし、普段利用しているサービスではRDBMSではなく、NoSQLのデータベースの方が活躍しているということを知りました。

銀行の口座取引やECサイトの決済といったお金を管理するシステムでは、トランザクション処理が大切になりますので、RDBMSが広く利用されています。

オンラインゲームではKVSの分散型インメモリーデータベースがフロントでユーザからのアクセスを受け付けることで膨大なアクセスを素早く処理しています。

あるブログでは、データはカラムファミリー型データベースによってデータを管理していたりします。

FacebookやtwitterなどのSNSでは、グラフデータベースによって、友人検索やフォロワー検索が瞬時に行えるようになっています。

データベースはその用途によって、様々な選択肢があることが分かりました。顧客のやりたいことを叶えるために「最適なデータベースとは何か」を考え、提案できるデータベースエンジニアに私はなりたいです。

そのためには、もっともっと勉強する必要があります。データベースエンジニアは大変な仕事だと思いました。

最後に本の紹介

最後に、この記事を書くにあたって最初に読んだ本を紹介します。こちらは会社の先輩から紹介していただいた本ですが、データベースのことを知る一冊としてはとても良い本でした。

こちらの本も初心者の方にはお勧めです。