知ってて損はないはず!いろいろなNoSQL達

皆さん、こんばんは。笹亀です。

夏もあっという間に終わり、ようやく秋らしい季節になってきました。
自分のiPhone4は地図問題でiOS6にせずにいますが、iPhoneのpush通知でOSバージョンアップのお知らせがきました。そろそろどうしようか悩みどころです。

さて、本日はNoSQLについてどのようなものがあるのか紹介したいと思います。
まず、NoSQLというのは、"No SQL"ですがRDBMS(MySQLとかPostgreSQLなど)を使わないシステムのことを言うのではありません。NoSQLはRDBMSとは違うデータベース技術のことを言います。
NoSQLはいくつかの種類に分類がされています。


 ・KeyValue型
 ・カラム型
 ・ドキュメント指向型
 ※上記に記述したNoSQLの種類ごとにミドルウェアがあります(後記)

NoSQLはRDBMSとは違うデータベース技術ですので、RDBMSが得意ではない箇所を補うためにNoSQLを利用するという使い方が多いです。RDBMSの苦手なところというのは大量のデータと高速に読み書きをすることです。NoSQLは大量のデータの読み書きが得意とされています。
その他にもNoSQLの特徴はいろいろあるのですが、いくつかあげるとすれば以下になります。


 ・RDBMSと比べて高速に動作する(読み・書き)
 ・スケールアウトをすることを想定した作り
 ・シンプルなデータ構造で構成

上記で説明させていただいた内容ですと、RDBMSとセットで使用するように思えますが、Webシステムの性質によってはNoSQLだけを利用した方がパフォーマンス的にも向上するといった場合もあり、RDBMSを利用せずにNoSQLだけを利用するというもよくあります。

それでは、NoSQLの概要もわかったいただいたと思いますので、それぞれの種類ごとのNoSQLを紹介したいとおもいます。

■memcached
memcachedは有名でWebエンジニアであれば知っていないといけない技術の一つですね。
NoSQLの分類ではKeyValue型になります。
PHPとも相性がよく、PHPでよく利用される使われ方はセッションをファイルで保存するのではなく、memcachedを使って保持する方法です。メモリーに保持する仕組みなので高速に動作しますので、いろいろな使い方が出来るのが特徴です。
私も実務でセッション保持させる用途で使ったことがあります。

■Flare
memcached互換の分散型のストレージサーバです。こちらもNoSQLの分類ではKeyValue型になります。GREEさんが分散型のストレージサーバとして作成し、GREEさんのシステムでも使用実績があり、信頼度が高いのが特徴です。memcachedと同じくPHPではセッション管理にも利用できます。
Flareには、memcacheのデータをレプリケーションして使用する機能があり、MySQLのレプリケーションと同じようなMaster・Slaveのように構築することができます。
レプリケーションさせるような使用する用途があり、実際にシステムに組み込んで利用したことがあります。

■TokyoTyrant(2012/10/10 追記)
memcachedと互換プロトコルで、こちらもNoSQLの分類ではKeyValue型になります。特徴としてはTokyoTyrantサーバを停止してもデータが消えない(永続性がある)ことと、様々なデータ型があり、それらを使用する用途に応じて使い分けができることです。
実際にはまだ私は実務で利用はありませんが、PHPでもPECLでライブラリが用意されており、開発するにあたっての情報も豊富です。
http://www.php.net/manual/ja/book.tokyo-tyrant.php

■Redis
こちらもmemcachedと同じくKeyValue型のNoSQLですが、大きく異る点があります。
memcachedなどはメモリにキーと値を保持されるので、データは永続性がありませんが、Redisも通常はメモリーにデータを保持しますが、一定量以上のデータの登録・変更が加わると自動的に非同期でディスクに書き出されます。そのため、データに永続性を持たせることができます。
Redisはまだ使う機会がないのですが、永続性を持たせることができるという点では非常に興味深く、使用する機会があったら使ってみたいです。

■Cassandra
Cassandraは、Google BigtableのデータモデルとAmazon Dynamoのレプリケーションなどの分散システムデザインを融合させてできた分散データベースです。もともとはFacebook社が作成したもので、Apacheのファウンデーションに寄贈され、Apacheのトッププロジェクトになってます。
NoSQLの分類ではカラム型になります。詳しくは下記に記載されてます。
http://gihyo.jp/dev/serial/01/cassandra/0001
余談ですが、Amazon DynamoDBというフルマネージドのNoSQLが出てきております。CassandraがDynamoを参考にしてつくられている関係で、よく比較されています。Amazon DynamoDBはインフラ構成を気にせずにスケールアウトできるので注目されています。
Apacheがトッププロジェクトとして力をいれていることからぜひ使ってみたいものの一つですが、残念ながらまだ実務では使ったことがありません。

■MongoDB
MongoDBの特徴はデータが一定の型をとる必要がないデータベースです。NoSQLの分類ではドキュメント型になります。RDBMSがデータ投入時にテーブル定義を必要とするのに対して、ドキュメント型は1件ずつフォーマットが違っていても問題なくデータ登録できるのも特徴です。事前に型を決める必要がないため、変更頻度の高いデータベースに有効です。
また、MongoDBは簡単な条件を加えてデータを取得することができ、簡易的なRDBMSみたいな使い方もできます。
MongoDBは私も使用したことがあります。実際には大量のデータを高速に投稿でき、簡単な検索ができる特徴を生かして、メンバーの投票システム(Yes,No型)などで利用しました。

今回、紹介したのはまだまだNoSQLの一部です。調べているうちにたくさん出てきます。
その中でもやはり実績があるものがインパクトがでかく、「使ってみようかな?」って思いますね。
皆さんもこれを機会にNoSQLライフしてませんか?^^

※2012/09/28 追記 2012/10/10 修正
ここでは解説しなかったNoSQLの種類で「hBase」がございますが、「hBase」を使用している「Hadoop」がございますが、本日、「Hadoop」を使った独自ファイルシステムがオープンソース化されたというニュースが出ていました。
http://jp.techcrunch.com/archives/20120927quantcast-open-sources-hadoop-distributed-file-system-alternative/