データベース技術の世界に新顔が次々と登場している。米Danga Interactiveの「memcached」、ミクシィの「Tokyo Cabinet」と「Tokyo Tyrant」、楽天の「ROMA」、グリーの「Flare」などだ。いずれも半導体メモリーを使って大規模データベースを高速処理する技術である。面白いのは、4社ともIT製品を開発するメーカーではないことだ。

 4社は、Webを使ったサービス事業を手掛ける企業であり、本来であればメーカーが開発した製品や技術を使う立場である。ところが、こうした「ユーザー企業」が自ら基盤技術を開発し、それを利用している。

 memcachedやTokyo Cabinet/Tyrant、ROMA、Flareの中では、memcachedが一番古い。Danga Interactiveが自社のブログ・サービス「LiveJournal」を改善するために2003年に開発した。ブログ・サービスで使うデータベースの内容を半導体メモリーにキャッシュし、高速処理を実現している。ブログ・サービスでは、利用者が投稿した記事やコメント、トラックバック情報をデータベースに格納し、それらを基に数百万人に及ぶ利用者が閲覧するWebページ(HTML)を動的に生成する。その際に、データベースが処理のボトルネックになりやすかった。

 memcachedの特徴は、データをキャッシュするメモリーとして、通常のPCサーバーの物理メモリーを利用すること。大容量データを複数のPCサーバーのメモリーに分散しておくために、「キー・バリュー型データストア」と呼ぶ方法を採用している。データをいったん非正規化し、「キー」とそれに対応する「値(バリュー)」にしてから保存する。データをキーと値の組み合わせにすることで、複数のサーバーに分散しておける。

 ディスクの代わりに半導体メモリーを使用してデータベース処理を速める技術「オンメモリー・データベース」は以前からあったが、memcachedは安価なPCサーバーを使用し、コストを抑えている。こうした技術は、大規模データベースを高速処理する必要があるWebサービス企業に人気がある。

ミクシィ利用者の「最終ログイン時刻」を保存する

 ソーシャル・ネットワーク・サービス「mixi」を運営するミクシィも、memcachedを利用している。ミクシィ開発部研究開発グループの平林幹雄マネージャーによれば、同社はmemcachedを搭載するPCサーバーを100台以上稼働させている。mixi内で利用者が閲覧する「日記」などのページを動的に生成しているが、利用者が増えるにつれ、データベースサーバー(MySQLを利用)のパフォーマンスが劣化してきたため、利用者情報やコンテンツをmemcachedにキャッシュし、ボトルネックの解消を図った。

 さらにミクシィは別途、データを書き込めるキー・バリュー型データストア技術「Tokyo Cabinet」を自社開発した。複数のWebサーバーが記録した利用者の「最終ログイン」情報をTokyo Cabinetに送信し、ここで保存する。利用者がページを閲覧した時刻をデータベースに書き込む必要があった。

 Tokyo Cabinetは毎秒250万件のクエリー処理ができるように設計した。加えて、メモリーのデータをそのままハードディスクに保存できるようにした。PCサーバー上のメモリーに蓄えたデータは、サーバーの電源が落ちた際に消えてしまうからだ。二つの技術を実装した結果、10台以上のPCサーバーで処理していた最終ログイン時刻の格納が1台のPCサーバーでまかなえるようになった。

 平林氏によると「最終ログイン時刻の格納によって発生するクエリー件数は毎秒1万1000件以上」もある。ところが「PCサーバー1台のMySQLが処理できるクエリー件数は毎秒2000件が限界だった」。これは最終ログイン時刻が書き込まれるMySQLのデータベースが格納されたハードディスクが大きなボトルネックになっていたからだ。memcachedはあくまでキャッシュ技術であって、データの書き込みや更新には使用できない。そこで「データを書き込めるようにしたmemcached」としてTokyo Cabinetを開発した。「Tokyo Tyrant」は複数のコンピュータからTokyo Cabinetを同時に利用するためのサーバーである。