キーバリュー型データベースの概要とその例
Memcachedの利用方法と利用例
前述したように、Memcachedはオープンソースで公開されていますので、ソースコードをダウンロードしてコンパイルすれば、利用することができます。
また、Linux等の各種のディストリビューションには、Memcachedのパッケージが用意されていることが多いです。例えば、Fedora 13では以下のコマンドでmemcachedをインストールすることができます。
yum install libevent
yum install libevent-devel
yum install memcached
インストールが完了したら、memcachedを起動します。Fedora 13だと、起動用のスクリプトもインストールされるようになっているので、サービスの一覧の画面で簡単に起動することができます。
この後、個々のプログラム言語にMemcachedのライブラリをインストールすれば、プログラムの中でMemcachedを使うことができます。例えば、PHPの場合だと、PECLにMemcachedのライブラリがありますので、それをインストールします。
Memcachedのプロトコルは非常にシンプルで、「データを保存する」「データを読み込む」「データを削除する」などのいくつかのコマンドがあるだけです。各プログラム言語のライブラリでも、これらのプロトコルに対応する機能が装備されています。
前述したように、Memcachedはデータベースから読み込んだデータをキャッシュするのに使うことが多いです。例えば、PHPでブログのシステムを作っているとして、特定のIDの記事(エントリー)をMemcachedでキャッシュしつつ読み込むなら、以下のリストのように処理を組みます。
3行目の文で、Memcachedにキャッシュした記事を読み込みます。そして、記事がなかった場合は、5行目の文によってデータベース等から記事を読み込み、6行目でMemcachedに記事をキャッシュします。
mixiを支えるキーバリューデータベース - Tokyo CabinetとTokyo Tyrant
次に、ファイルにデータを保存するタイプのキーバリュー型データベースとして、「Tokyo Cabinet」を紹介します。
Tokyo Cabinetは、mixiの平林幹雄氏によって開発されたキーバリュー型データベースのライブラリです。高速な動作や、巨大なデータを扱えることなどを目指して開発されました。プログラムの用途に応じて、表2の4種類のデータベースを扱うことができます。
ただ、Tokyo Cabinetは、ネットワーク越しにアクセスしたり、複数のプロセスでデータベースを共有したりすることが簡単ではありません。そこで、これらの機能を実現するためのサーバーとして、「Tokyo Tyrant」も公開されています。
Tokyo Tyrant(とTokyo Cabinetの組み合わせ)は、memcachedほどではないにせよ、高速に動作するようになっています。また、memcachedとは違って、ファイルにデータを保存するため、コンピュータの電源を切っても内容が保持されます。大量のデータをなるべく低負荷で処理する必要があり、またデータをファイルに保存したいような場合に、Tokyo Tyrantが適しています。
さらに、Tokyo Tyrantには、memcachedと同じプロトコルで動作するモードもあります。そのため、memcachedで動かしているシステムをTokyo Tyrantに移行させることも、比較的行いやすいです。
Tokyo Tyrantは、mixiの中で実際に使われています。mixiのエンジニアブログによると、mixiの各ユーザーの最終ログイン日時を管理する処理に、Tokyo Tyrantが使われているそうです(参照ページ)。
なお、Tokyo Cabinet/Tokyo Tyrantはオープンソースで公開されていて、ライセンスはLGPLです。
種類 | 特徴 |
---|---|
ハッシュデータベース | データの量が増えても、値の読み込み速度がほとんど変化しない |
B+ツリーデータベース | キーを文字コード順に読み出すことが可能 |
固定長データベース | 高速性が最も高い |
テーブルデータベース | 複数の列からなる表を扱うことができる |
表2:Tokyo Cabinetで扱えるデータベース