Database Watchmemcachedの使い方(1)

memcached+PostgreSQLで実現する
ハイパフォーマンスWebアプリケーション構築



大規模Webサイトでの利用事例が公開されたこともあり、キャッシュサーバを使ったデータベースシステムが注目を集めつつあります。中でもmemcachedは多くのサービスで運用実績がある注目株です。MySQLでの事例が多く取り上げられていますが、本稿では安定性抜群のPostgreSQLと組み合わせた場合の実装方法を紹介していきます。
InterDB
鈴木啓修
2008/7/30
・本稿の前提環境
  memcached 1.2.5
  データベース:PostgreSQL 8.3.1
  OS:CentOS 5(Linux kernel 2.6 )
  シェル:bash
  CPU:Intel Core2Quad 9660 2.4GHz
  RAM:PC2-6400 8GBytes

memcachedとは

 memcachedは、Danga Interactiveによって開発されたオープンソースのメモリキャッシュサーバです。

 メモリ上にデータを保存するのでmemcachedを終了するとデータが失われますが、(OracleやMySQLといった)RDBMSと比較するとけた違いの高速レスポンス性能を有し、数千万件という大量のデータを扱ってもほとんど性能が劣化しないという特徴があります。

 機能は限界まで切り詰められ、基本的にはキーとデータの組(以下、itemと呼びます)の保存と検索と削除しかできません。

 にもかかわらず、memcachedはTwitterFacebookなど全世界からアクセスが集中するWebサイトにおいて、大量のトラフィックをさばく高速レスポンスの要として利用されています。Facebookでは800台を超えるmemcached用のサーバが稼働しているようです。

 これら以外にも、公表されているだけでSlashdotLiveJournalWikipediaなどがユーザーとして名を連ねています(公式ユーザーリスト: http://www.danga.com/memcached/users.bml)。

 大規模なWebサイトに限らず、昨今のWebシステムは一時的に大量のアクセスが集中することが多く、その度にRDBMSがボトルネックになります。こうした事態への対処法の1つとして、データの一部をmemcached上に保存してRDBMSの負荷を抑えるスタイルが増えつつあります。

 例えばセッション管理は、基本的にはセッションIDを保存すればよいので、memcachedに最適な仕事です。また、SNSを例に取ると、毎回表示される自身や友人のプロフィールなどは、その都度データベースにアクセスするのでなく、memcached上に保存すればデータベースの負荷が大幅に下がるでしょう。

 このように、memcachedは今後のWebシステム設計を大きく変える可能性を秘めています。

クライアント用ライブラリ

 memcachedのクライアント用ライブラリは多数開発されています。 C言語による3種類のライブラリ(libmemcache、apr_memcache、libmemcached)をはじめ、Perl/PHP/Ruby/Python/Javaなど、主要な言語のためのAPIが存在します。また、オープンソースのRDBMSであるPostgreSQLとMySQLからmemcachedを操作するライブラリも開発されています。

言語/ RDBMS クライアントライブラリ
C libmemcache
apr_memcache
libmemcached
Perl Cache::Memcached
Cache::Memcached::Fast
PHP PECL memcache
Ruby Ruby MemCache Client
Python python memcached
Java memcached client for java
PostgreSQL pgmemcache
MySQL Memcached Functions for MySQL
表1 クライアントライブラリ一覧

 

インストールと実行

 memcachedはlibeventというイベント処理用ライブラリを利用するので、memcachedのインストールに先立ち、libeventをインストールしてください。本稿では以下のとおり、本稿公開時点での最新安定版であるlibevent 1.4.5を導入します。

libevent-1.4.5-stable.tar.gzの入手先
http://www.monkey.org/~provos/libevent/

 適当なディレクトリでアーカイブを展開し、configureコマンドとmakeコマンドを実行します。

[root]# tar xvfz libevent-1.4.5-stable.tar.gz
[root]# cd libevent-1.4.5-stable
[root]# ./configure --prefix=/usr
[root]# make && make install

 次にmemcached 1.2.5をダウンロードします。

memcached-1.2.5.tar.gzの入手先
http://www.danga.com/memcached/download.bml

 libeventと同様、適当なディレクトリでアーカイブを展開し、configureコマンドとmakeコマンドを実行します。

[root]# tar xvfz memcached-1.2.5.tar.gz
[root]# cd memcached-1.2.5
[root]# ./configure --enable-threads
[root]# make && make install

  実行はroot以外のユーザーで行います。

[root]# su postgres
[postgres]# /usr/local/bin/memcached -p 11211 -m 1000 -d

  主な起動オプションは下記のとおりです。

オプション 説明
-p [num] TCPポート番号を指定。デフォルトは11211
-d デーモンとして起動
-m [num] 確保する最大メモリをMバイト単位で指定。デフォルトは64Mbytes
-t [num] 起動するスレッドの数を指定する。デフォルトは4。詳細はji参照
表2 memcachedの主要な起動オプション
コラム1:PHPからmemcachedを使う

 ここではPHPからmemcachedを使う方法を説明します。
はじめにpeclコマンドでmemcacheライブラリをインストールします。

[root]# pecl install memcache

 次にphp.iniファイルに以下の1行を追加します。

extension=memcache.so

 これでPHPからmemcachedを使う準備ができました。

 以下にはPHPのサンプルプログラムを示します。

・3〜4行目
 初期設定で、memcachedの稼働するサーバのIPアドレスと接続ポートを指定します。

・7行目
 データの保存です。引数の意味は第1引数がキー、第2引数がデータ、第3引数がフラグ、第4引数がexpire時間(保存時間)です。時間は秒単位で指定します。

 この例ではキー'fukushima'、データ'福島'を3600秒(=1時間)保存します。PHPを含むほとんどの言語のAPIはフラグを無視するので、適当な値を入力してください。 

・10行目
 10行目はデータの検索です。キー'fukushima'を持つデータを返します。

01: <?php
02: /* memcachedとの接続 */
03: $memcache = new Memcache;
04: $memcache->addServer("127.0.0.1", 11211);
05:
06: /* データの保存 */
07: $memcache->add('fukushima', '福島', 0, 3600);
08:
09: /* データの検索 */
10: $data = $memcache->get('fukushima');
11: print "key('fukushima') => " . $data . "\n";
12:
13: /* 切断 */
14: $memcache->close();
15: ?>

 

  1/4 次のページへ

 Index
memcached+PostgreSQLで実現する
ハイパフォーマンスWebアプリケーション構築
→ Page 1
・memcachedとは
クライアント用ライブラリ
インストールと実行
  Page 2
・memcachedの仕組みと新機能
memcachedの仕組み
新機能とベンチマーク
  Page 3
・PostgreSQLからmemcachedを使う
  Page 4
pgmemcacheのインストール
postgresql.confの編集
バッチファイルpgmemcache.sqlの実行
→ memcached+PostgreSQLで実現するハイパフォーマンスWebアプリケーション構築【後編】



Databaseフォーラム全記事インデックス

TechTargetジャパン

Database Expert フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH