キーバリュー型データベースの概要とその例
キーバリュー型データベースの概要
まず、日々の天気を記録するようなプログラムを作ることを考えてみてください。この場合、表1のような2列の表を作って、片方の列に日付、もう片方の列に天気を保存する、といったことを行うことが考えられます。
この例のように、プログラムを作る中で、以下のような処理を行うことは、よくあることです。
- 2つの情報からなる組を扱う
- 2つの情報のうちの1つが、個々の組を識別するための情報になっている(表1の例だと日付)
- もう片方の情報が、主に必要な情報になっている(表1の例だと天気)
このような「2つの情報の組」のうち、個々の組を識別する情報を「キー」(Key)と呼び、もう片方の情報を「バリュー」(Value、値)と呼びます。キーバリュー型データベースは、このような「キー」と「バリュー」の組を保存するためのデータベースです。
多くのプログラム言語では、キーとバリューからなるデータ構造を扱う機能を持っています(例:PHPの連想配列や、Perlのハッシュなど)。そのため、このようなデータ構造を永続的に保存する手段として、キーバリュー型データベースは、古くから使われてきました。
リレーショナルデータベースが広く使われるようになってからは、キーバリュー型データベースが使われる機会は減りました。しかし、キーバリュー型データベースは仕組みがシンプルで、リレーショナルデータベースよりも高速に動作させることができます。
そのため、最近の巨大Webアプリケーションなどで、キーバリュー型データベースが見直されるようになり、さまざまなキーバリュー型データベースの実装が出回るようになりました。
日付 | 天気 |
---|---|
2010年10月1日 | 晴 |
2010年10月2日 | 晴のち曇 |
2010年10月3日 | 曇り時々雨 |
… | … |
表1:日々の天気を記録する
メモリ上で動作するキーバリューデータベース - Memcached
キーバリュー型データベースの中で、現在よく使われているものの1つとして、「Memcached」があります。
Memcachedは、元々は「LiveJournal」というブログシステムのために、Danga Interactiveによって作られたキーバリュー型のデータベースです。オープンソースで公開されていて、多くのWebサービスでMemcachedが使われるようになり、現在の大規模Webサービスを支える重要なデータベースになっています。LiveJournalはもちろんのこと、WikipediaやFlickrといった著名なWebサービスでも使われています。
一般的なデータベースでは、データをファイル(ハードディスク等)に保存します。一方のMemcachedでは、「mem」という単語が入っていることから分かるように、データをすべてメモリ上で管理します。メモリはファイルよりも高速にアクセスすることができますので、Memcachedも高速に動作します。
「cache」という単語も含まれていて、その名の通りキャッシュ用途に使われることが多いです。リレーショナルデータベースから読み込んだデータをMemcachedでキャッシュし、次回に同じデータを読み込む際にはMemcachedのキャッシュを使うようにするのが、一般的な使い方です。このようにすれば、リレーショナルデータベースへのアクセス回数を減らし、システムのパフォーマンスを高めることができます。
また、Memcachedはネットワークを介して動作する仕組みになっています。Memcachedを複数のサーバーで動作させて、大量なアクセスが発生した際の負荷を分散させることもできます。
さらに、Memcachedにアクセスするためのライブラリも、PHPやPerlなどの各種の言語に対応したものがあります。