Q:まずは、Basho TechnologiesとNoSQLデータベースであるRiakについて教えてください。
森:Bashoは2008年に設立した会社で、社名は「松尾芭蕉」から取っています。世界に120名ほどの社員がいて、そのうち100名ぐらいがエンジニアという技術志向の会社です。日本にも2012年9月に拠点を設け活動を始めました。そんなBashoは簡単に言えばデータベースの会社です。OracleやDB2などを扱う会社とビジネスモデルは近いでしょう。データベースを使ったSIを提供するのではなく、データベースにまつわるコンサルティング・サービスを提供しています。
Bashoが提供するデータベースは、NoSQLデータベースの1つです。一般的に、SQLデータベースは中央集中型の処理でデータの整合性を守るロックの仕組みが特長です。スケールアップで性能拡張することになり、強力なマシンで動かすことになります。その一方で、並列分散処理はあまり得意ではありません。得意でない部分を補うために出てきたのがNoSQLのデータベースです。
世の中には今や、NoSQLのデータベースが200くらいはあるはずです。その中で企業向けに本格的に使える製品は、それほど多くはありません。利用しているユーザーがそれなりにいて、きちんとサポートサービスがある。そういった製品はDataStaxが提供するCassandra、ドキュメント型のMongoDBとCouchbase、そして我々が提供しているRiakの4つくらいです。最近ではSparkも注目されていますが、これはどちらかと言えば解析用エンジンで、Riakと組み合わせて使うようなものになります。
RiakはCPUの負荷が小さいのが特長です。IOが足りなければノードを追加します。ストレージにSSDを使う手もあります。クラスタにはネームノードはなく、全てのノードが対等でシンメトリックな構成になります。ノード間の通信はTCP/IPなので、特別な接続は必要ありません。ただしノードが増えればノード内の通信は重たくなるので、10Gなどの高速ネットワークを選ぶ必要があります。
OSはLinux、UNIX、Mac OSで動きます。これらが混ざっていても大丈夫です。ノードの構成は合わせる必要はありませんが、IO性能が低いところに引きずられるので一般的にはなるべくスペックは同じにして使います。
SQLデータベースのテーブルの当たるものはバケットと呼ばれ、この中にKeyとValueの組み合わせが格納されます。バケットは好きなだけ作ることができますが、バケット同士の結合などは行えません。アプリケーションからはRESTful APIでアクセスします。スピードを重視する際にはGoogleのプロトコルバッファを使います。
Q:NoSQLデータベースのRiakの強みについて教えてください。
森:Riakは拡張性、スケーラビリティに優れていることが一番の特長です。1台でも動かせますが、基本的には二重障害にも耐えられるよう、5台のクラスタからのスタートを推奨しています。5台構成のクラスタでも、アプリケーションからは1つのデータベースに見えます。
Riakの代表的なユーザー例としては、米国の流通小売業であるベストバイがあります。ベストバイではインターネット販売のビジネスが大きくなっており、多くの売上げがクリスマス前の時期に集中します。このときの処理のピークはかなり高いものがあり、ピークに合わせてサーバーを揃えることは難しい。なのでベストバイでは、Amazon Web Servicesを使って対応しています。
そして、データベースにはRiakを選びました。ピーク時にはRiakの動くサーバーを増やし対処するのです。Riakが評価されているのは、たんにノードを増やせるだけでなく伸縮自在なところです。ノードを増やすのも減らすのも簡単です。
この伸縮性は、オンラインゲームの会社など、ビジネスの予測が立てにくいところでも評価されます。ゲームのビジネスでは、当たったときに機会を逃さないことが大事です。タイムリーな拡張でチャンスに追随できるかは重要です。Riakではノードを増やしても、データをどこに配置するかなどは考える必要がありません。さらに、耐障害性にも強い。データは複数ノードに書き込まれ、5台構成であれば3つのコピーを持つことになります。なので、同時に2つのノードに障害が発生してもデータは守られます。
この耐障害性の高さ、可用性の高さが評価され、英国の国民保険サービスの治療や投薬情報を格納するデータベースにも採用されています。これはOracle Databaseから移行した事例となっています。
Q:Riakの高い拡張性はなぜ実現できるのですか?
森:RiakはKey-Value型のデータストアです。Keyに対するValueをデータベースから取ってくることができる。このシンプルさが、高い拡張性を生みます。英国の国民保険サービスの場合は、元はOracleを使っていてだんだんとデータも増え、複雑なデータベース構造になっていました。そのため、必要なデータを取ってくるSQLの処理に時間がかかるようになっていました。
SQLでやっていた処理を、そのままRiakに置き換えるのは大変です。そこで、ロジックを組み直しアプリケーションを作り替えています。結果的には10分かかっていたデータ取得処理が、2秒に短縮されました。ただし、このRiakのデータベースでは、データを取ってくることしかできません。Oracleのように複雑な検索とかはできないのです。
Riakを活用するには「SQL脳」になっている頭を「NoSQL脳」に切り換える必要があります。考え方を変えアプリケーションを作り直せば、運用性が高く拡張性と可用性を備えた環境が手に入ります。