Photo by shindotv
ここ最近、海外のブログで「NoSQL」という単語をちょこちょこと見るようになりました。
これは新しいデータベースのムーブメントで、「SQL=リレーショナル」ではないデータベースの事を指しています。
NoSQL DBサーバの有名な物は、Facebookがリリースした「Cassandra」、Erlangで書かれた「CouchDB」、日本からは、mixiがリリースしている「TokyoTyrant」があります。
またGoogle App Engineでは、DataStoreというBigTableベースのNoSQLサービスが提供されています。
ある程度ユーザを集めたコンシューマ向けサービスは、大抵の場合パフォーマンスとの戦いとなります。
技術誌の中でも「スケールアウト技法」的な記事を目にすることが増えてきたことからも、多くのサイト運営者が、パフォーマンスの問題を抱えていることがわかります。
多くの場合、問題になるのは、データベースのパフォーマンスです。
アプリサーバは台数を増やせばその分パフォーマンスが向上するケースが多いですが、データベースは、単純にサーバを増やしてもパフォーマンスは向上しません。
そこで、スケールアウト(サーバの台数を増やしてパフォーマンスを向上させる手法)がしやすいデータベース=NoSQLDBを導入しようという流れが出てきています。
WikipediaのNoSQLの項目をみると、既に20個近いNoSQLなデータベースサーバが並べられています。
この2週間ほど、Google App Engine(GAE)に挑戦しているのですが、ここではDataStoreというNoSQLのデータベースしかサポートされていません。
このDataStoreはSQLの様な複雑なクエリーをサポートしておらず、「SELECT * FROM users WHERE x>10 AND y<10」の様に複数のカラムに対しての比較演算や、「SELECT count(*) FROM users」の様に集合関数を使うこともできません。
初めは「こんなデータベースでプログラムが組めるのか?」と心配でしたが、データの構造をよく考えることで、多くの場合、乗り越えることが出来ることが分かってきました。
まだデファクトスタンダードもないので、一般に使われるようになるまで、2,3年かかるかもしれませんが、トラフィックやデータ量の大きいサイトでは必須の技術になると思います。
リレーショナルからNoSQLのデータベースの移行は簡単ではなく、ものすごく大きなパラダムシフトになります。
この頭の切り替えは結構大変で、今からGAEなどを通じて慣れておかないと置いて行かれそうと思い、勉強中です。
参考リンク
miko
SQLというより、ACID特性に縛られなければ、道は簡単に開けますよ。
でも、このあたりまでいくとインフラ周りの技術にどっぷりはまることになるけど。
よくでてくるキーワードとしては、キーバリュー型データストア(KVS)、関数型言語(今はMapReduce?)あたりですかね。