「NoSQL」って何?SQLを使わないデータベースの仕組み
データベースの中では「SQL」を使ってデータアクセスを行うことが日常的になっていますが、「ビッグデータ」を扱うにつれ「NoSQL」という言葉を聞く機会も増えてきました。
「NoSQL」という言葉は正式名称ではなく「SQLを使わない」という意味で使われる言葉ですが、「KVS(Key Value Store)」と呼ばれることもあります。
「SQL」を使わないデータベースシステムの多くは「キーと値」がセットになったデータを扱うため、特に分散してデータを管理するシステムを「分散型KVS」と呼ぶこともあります。
NoSQLデータベースの種類
「NoSQL」には個人が使えるものから商用利用されているものまでさまざまな種類がありますが、いくつかをリストアップしてみたいと思います。
- Apache Cassandra
- Apache HBase
- Amazon DynamoDB
- Redis
- MongoDB
- Memcachedb
- OrientDB
など、他にも数多くのNoSQL系データベースがあります。
ではいくつかのNoSQLデータベースついて見ていきたいと思います。
Apache Cassandra
FACEBOOKが開発を始めたことでも有名なのが「Cassandra」です。
分散型のデータベースで高速にデータを処理できることで、現在実用性の高いNoSQLとして普及拡大しているデータベースです。
「Cassandra」自体はJava言語を使用して開発されています、
FACEBOOKは2008年に「Cassandra」をオープンソースとして公開し、現在、Apacheのトップレベルプロジェクトへと格上げされました。
データベースへのアクセスに「Apache Thrift(アパッチ スリフト)」と呼ばれるRPCフレームワークを使用しているため、数多くのプログラミング言語で「Cassandra」を使用することができます。
Apache HBase
「HBase」は、「Apache Hadoop」と呼ばれる、分散処理用フレームワークで主に使用され、数十億件のデータを処理する必要のある大規模データを扱う際に使用されます。
何千台・何万台ものサーバを運用しているサービスでは一日に何台・何十台とサーバが壊れるため、「データ保全」に関しても従来のデータベースシステムより高い信頼性が求められます。
「HBase」は、Google社の「BigTable」技術を元に開発が行われ、BigTableのクローン的な存在なので、大規模データを安定的に処理できるデータベースになってるんですね♪
柔軟に対応できるテーブル構造で、高速なMapReduce処理ができて、リアルタイムにウェブ処理できるのも魅力です。
Amazon DynamoDB
容量増加への負担軽減やパフォーマンスの調整など、ユーザーの「気にしたくない」部分をうまくカバーしてくれるサービスが「Amazon DynamoDB」です。
プログラマはAPI経由でデータ操作を行うことができて、データベース側の面倒な処理は全てお任せにできるので、大変人気の高いNoSQLタイプのデータベースサービスです。
Amazonは10ミリ秒以下のレイテンシに対応するとコミットしていることもあり、スケールしても安定性の高いハイパフォーマンスを実現できることをサービスの売りにしているようです。
Amazon DynamoDBでは3か所に分散してデータベースのバックアップがされ、震災などもデータセンターが被災してもデータ保全がされる仕組みになっています。
ユーザーに対しては「セルフベースラボ」と呼ばれる無料のオンライントレーニングプログラムがあるため、初心者でも安心して学習していくことができるよう配慮されています。
Redis
「Redis(Remote Dictionary Server)」は高速アクセスが可能なNoSQLデータベースでKVS型のデータ構造を採用しています。
ディスクへのアクセスを極力少なくするためにメモリ内にデータを展開し、データの変更が行われた後にディスクにデータを書き込むシステムを採用しているため、高速にデータを処理することができるようになっています。
しかし、ディスクへの書き込みを行う前に「電源断」や「メモリの故障」など予期しない事象が発生すると、ディスクへのデータ保存が行われないため、変更データが消失していますことになります。
そのため、定期的にデータをディスクへ保存することがデータ保全には大切になってきますが、「速度と保全」はトレードオフの関係なため、ある程度データ保全性を持ちつつ高速に動作させることができるのが「Redis」です。
MongoDB
ドキュメント構造のデータを格納し、大容量のデータを高速に扱えるのが「MongoDB」です。
各種のプログラミング言語に対応したドライバを用意し、「C・C++・Java・Javascript」などプログラミングシェアの高い言語でも問題無く使えるようになっているのも嬉しいところです。
NoSQLはSQLを発行するのではなく、それぞれのDBに用意された命令文を実行してデータ操作を行うため、ORMを使っているような感覚で扱うことができます。
レプリケーションにも対応しているため、分散して同時にデータを書き込むことで、高可用性を実現しているところも安心して使うためには重要なポイントですね。
NoSQLを活用したシステムの実例から学ぶ
NoSQLは何となく知っているけれど、「実際にどこでどうやって使われているの?」という疑問も出てくると思いますので、NoSQLを使用したシステムの事例をご紹介していきましょう。
ソーシャルゲーム
ゲームアプリの活用事例としては、サイバーエージェントとGREEのJV(ジョイントベンチャー)であるグリフォンでの事例です。
「Redis」と「Memcached」の活用事例を非常にわかりやすく簡潔にまとめて書いてくれているため、こういう事例がたくさんあるとありがたいですよね。
トラブルの対策なども紹介していて大変参考になります。
→「ソーシャルアプリにおけるRedisの活用事例とトラブル事例 」
ニコニコ生放送
「Redis」が使われている身近なサービスが「ニコニコ生放送」ですが、多種のデータを大量処理するためにいくつものシステムが横断的にデータ処理するケースもあり、MySQLを併用しながらデータの更新頻度によって使い分けているようです。
一気に視聴者が増え、データ処理が急増するタイミングを「突入負荷」と呼んでいるみたいですね(笑)
決して他人事では無く、自分で開発したサービスでもユーザーの急増による処理の増加は十分に起こり得るので、対策方法や仕組みを知っておくことはとても大切です。