memcachedの使い方(1)
memcached+PostgreSQLで実現する
ハイパフォーマンスWebアプリケーション構築
大規模Webサイトでの利用事例が公開されたこともあり、キャッシュサーバを使ったデータベースシステムが注目を集めつつあります。中でもmemcachedは多くのサービスで運用実績がある注目株です。MySQLでの事例が多く取り上げられていますが、本稿では安定性抜群のPostgreSQLと組み合わせた場合の実装方法を紹介していきます。
鈴木啓修
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はTwitterやFacebookなど全世界からアクセスが集中するWebサイトにおいて、大量のトラフィックをさばく高速レスポンスの要として利用されています。Facebookでは800台を超えるmemcached用のサーバが稼働しているようです。
これら以外にも、公表されているだけでSlashdot、LiveJournal、Wikipediaなどがユーザーとして名を連ねています(公式ユーザーリスト: 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 |
インストールと実行
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参照 |
ここでは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'を持つデータを返します。
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ジャパン
- やはりSELECT文は永遠のテーマです (2012/2/7)
Database Expertフォーラムの2012年1月のアクセスランキングをお届けします。定番の記事を一気に追い抜いてあの記事が…… - SELECT文で取り出したデータを加工して表示する (2012/1/25)
SELECT文で取り出したデータを対象に四則演算する方法など、データを見やすくする方法を解説します - 2012年は私たちが勉強会を盛り上げる! (2012/1/23)
2011年12月、データベース業界初の女子会が発足しました。そこで、女子会を盛り上げていってくれそうな2人にお話を伺いました - 複数の条件を指定してSELECT文を実行する (2012/1/13)
複数の条件を指定してSELECT文を実行する方法と、条件指定に必要な論理演算子、比較演算子の役割を解説します
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -
