江島健太郎氏によるブログ記事です。昨今におけるNoSQLの人気急上昇ぶりと、対するRDBMSの評価が下がっていることについて冷静に考察しています。
OracleやMySQLなどRDBMSはすでに成熟した段階にある一方、柔軟性やスケール性において弱点を抱えています。その点、NoSQLはRDBMSが抱えている問題を解消しているだけでなく永続性もある程度サポートしていることから持てはやされ、「SQLデータベースは死んだ」という極論まで出るようになってしまいました。そしてMongoDBのように「書き込み時にはディスクに同期しない」という、永続性においてはある意味致命的な問題をトレードオフとして認識せず、ただ賞賛する界隈に対して、皮肉の意味を込めた動画やサービスが作られ話題となりました。
江島氏は「NoSQLはSQLを極めてこそ真価を発揮する」と主張しています。そして原点に立ちかえり、そもそもWebアプリケーションにおいてデータベースに求めている機能は何なのか、と問いかけています。江島氏はこの問いに対して、データベースは単一の変数を複数のサーバインスタンス間で共有できる「グローバル変数」の用途として使われるものであり、これまではRDBMS+memcachedで実装していたけれども、これからはシンプルに済ませられるNoSQLへ移行していくのではないか、と予想しています。しかし永続化に対する問題は存在するため、Redisのアーキテクチャを例に解決案を模索しています。
そして、NoSQLが成功するかは「1Gバイトの物理メモリで10Gバイトのデータを扱うこと」(1:10問題)をいかに解決するかがカギになる、と述べています。現状のNoSQLはデータサイズが実メモリを超えると極端に性能が落ちてしまいますが、MySQLのInnoDBが持つバッファプールのしくみにより、劣化度合いをゆるやかに抑えられます。
1:10問題を解決するには実装の難易度が高く、時間がかかるものですが、予想外のアクセス集中が起きるWebアプリケーションの世界においてはとても重要です。データ書き出し方法の制御とともにうまく解決できると、今後NoSQLは積極的に採用されることになるだろうと、将来のNoSQLの発展に期待しつつ記事を締めています。
URL:http://japan.cnet.com/blog/kenn/2010/09/20/entry_27042323/