KVS(Key-Value Store)は、既存のRDBと比べてシンプルな機能しかない代わりに、データを分割して多数のサーバーで分散処理できるスケーラビリティーの高さが特徴である。その代表例として、米Facebookが開発し、オープンソースソフトウエアとして公開されている「Cassandra」がある。
KVSは従来にはなかった膨大なアクセスをさばくため、大手のWebサービス事業者などが続々と開発している。米Googleの「Bigtable」と米Amazon.comの「Dynamo」がその先駆であり、Cassandraは両者の設計思想を受け継いだものだ。
Facebookは同社のSNS(Social Networking Service)において、ユーザー間で交換するメッセージの保存や検索などを行うデータベースとしてCassandraを開発し、最大150台程度のサーバーで運用した実績がある。最近ではほかにも多様な特性を持ったデータベースが開発されており、それらはSQLとは別の選択肢という意味で「NoSQL(Not only SQL)」と総称される。
スケーラビリティーと一貫性を検証
NoSQLに共通した特徴は、サーバーの台数を増やせば性能(スループット)が向上するというスケーラビリティーの高さにある。今回その実力を、代表格であるCassandraを使って検証することにした(検証1)。
またNoSQLは一般に、一部のサーバーが故障しても処理を続けられるように、データのコピーを複数のサーバーに保持する機能を持っている。コピーの一貫性をどこまで求めるかは、NoSQLによって異なるが、Cassandraではそれをアプリケーション側で制御できる。高い一貫性を求めるほど、性能は落ちると考えられる。そこで今回はCassandraが持つ、主要な三つの一貫性レベルのモードを試し、どれだけ性能が変わるのかを調べた(検証2)。
検証結果をまずまとめると、サーバー数を2台から、4台、6台へと増やしたとき、Cassandraのスループットはそれぞれ1.4倍、2.1~2.3倍に向上した(図1)。一貫性について三つのモードを比べると、最大2.2倍のスループットの差があった。
検証用のアプリケーションとして、ショッピングサイトを想定し、そのサイトで「最近閲覧した商品一覧」をブラウザーに表示するというモジュールを試作した。それを使って、閲覧された商品名をユーザーID(キー)とともに連続して書き込んだときの性能と、連続して読み出したときの性能をそれぞれ調べた。