pgmemcacheからmemcachedのデータを操作するmemcachedの使い方(2)(3/3 ページ)

» 2008年08月19日 00時00分 公開
[鈴木啓修InterDB]
前のページへ 1|2|3       

システムの動作確認

 システム構築が終わったので、試運転してみましょう。

 実際のシステムではWebサーバからPHPやJavaなどでPostgreSQLとmemcachedにアクセスしますが、ここでは説明を簡略化するため、psqlから直接アクセスします。適宜お使いの言語でアクセスすることを念頭にサンプルのSQLをご覧ください注2

登録処理

 ユーザーデータをテーブル「userlist」に登録します。

testdb=# INSERT INTO userlist VALUES (1234,  true, 'デューク東郷', 'GOLGO13', 2,  'gol13.jpg');
INSERT 0 1

 せっかくなので、memcache_get()を使って、memcachedにデータが保存されたかどうか確認してみましょう。

testdb=# SELECT memcache_get('1234');
memcache_get 
---------------------
GOLGO13,2,gol13.jpg
(1 row)

 ニックネーム=「GOLGO13」、友人数=「2」、写真=「gol13.jpg」がカンマ(,)で連結されて登録されていることが分かります。

更新処理

 次に、ユーザーデータを更新してみます。friends_numを2から0に更新します。

testdb=# UPDATE userlist SET friends_num = 0  WHERE uid = 1234;
UPDATE 1

 同様にmemcachedを確認すると、更新が反映されていることが分かります。

testdb=# SELECT memcache_get('1234');
memcache_get 
---------------------
GOLGO13,0,gol13.jpg
(1 row)

退会処理

 最後に退会です。テーブルuserlistのflagをfalseに更新すると、memcachedからuid=1234のデータが削除されます。

testdb=# UPDATE userlist SET flag = false WHERE  uid = 1234;
UPDATE 1
 
testdb=# SELECT memcache_get('1234');
memcache_get
--------------
(1 row)

memcachedの初期化とデータの定期再登録

 実運用で必須の、memcachedの初期化とデータの定期再登録を行う関数を定義して説明を締めたいと思います。

 システムを起動するときにmemcached上にデータをアップロードしなければならないのは当然ですが、データの定期再登録とは何でしょうか?

 memcachedを長期間連続運用する場合、メモリ上にデータがゴミとして残っては困るので、データの登録には必ずexpire時間を設定することが推奨されています。しかしexpire時間を設定すると、今度は必ずある時点でデータが消えてしまいます。そのため、expire時間よりも短い時間間隔でデータを再登録する必要があるのです。

 下に示すのが、そのための関数userlist_upload()です。

01 CREATE FUNCTION userlist_upload() RETURNS int AS
02 $$
03 DECLARE 
04   c    int;
05   id   userlist.uid%TYPE;
06   flg  userlist.flag%TYPE;
07   nm   userlist.nickname%TYPE;
08   fn   userlist.friends_num%TYPE;
09   ph   userlist.photo%TYPE;
10   data text;
11   cur CURSOR FOR SELECT uid, flag, nickname, friends_num, photo  FROM userlist;
12 BEGIN
13   c := 0;
14
15   OPEN cur; 
16
17   LOOP 
18    FETCH cur INTO id, flg, nm, fn, ph;
19    EXIT WHEN NOT FOUND; 
20      IF flg != FALSE THEN
21        data := nm || ',' || fn || ',' || ph;
22        PERFORM memcache_set(id::TEXT, data, INTERVAL '2 days');
23        c := c + 1;
24      END IF;
25   END LOOP; 
26
27   CLOSE cur; 
28
29   RETURN c;
30 END;
31 $$ 
32 LANGUAGE 'plpgsql';

 この関数はカーソルを使ってテーブルuserlistを全件検索し、1件1件のデータをmemcachedに再登録します。

 実行はSELECT文を使って次のように実行するか、定期的にバッチ処理として実行します。

testdb=# BEGIN;
BEGIN
 
testdb=# SELECT userlist_upload();
userlist_upload 
-----------------
54321
(1 row) 
 
testdb=# COMMIT;
COMMIT

 以上で、pgmemcacheを使ってPostgreSQLからmemcachedを使う方法、およびPostgreSQLとmemcachedを連携させる方法を説明しました。

pgmemcacheの今後

 前編で述べたようにpgmemcacheは歴史あるライブラリです。pgmemcacheはmemcachedを利用するに十分な機能を有し、すでに「枯れた」ライブラリとして実運用にも十分堪える品質を持っています。

 pgmemcacheは2007年3月以降開発が停止していますが、現状をメンテナーのN.Conway氏に尋ねたところ、「現在はサン・マイクロシステムのJ.Gates氏がlibmemcached対応を検討している」とのことです。詳細はまだ不明ですが、libmemcacheからlibmemcachedへの対応が試みられている模様です。

 また、筆者は別のアプローチとして、libmemcachedの関数群を直接利用できる「pgmemcached」を作ってみました。

 APIは今回説明したpgmemcacheと異なりますが、libmemcachedの多くの関数が利用でき、また、エラーハンドリング機能も実装できます。ご興味のある方は上記URLにアクセスしてみてください。

著者略歴

鈴木 啓修

某電器メーカーの研究員を皮切りにエンジニアとしてのキャリアを重ねる。データベース、OS、分散システム、プログラム検証論、形式的仕様記述、関数型言語、スペイン移住に興味がある。

著書に『PostgreSQL完全機能リファレンス』(秀和システム)、『MySQL全機能リファレンス』(技術評論社)、『標準PostgreSQL』(ソフトバンククリエイティブ)などがある。

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

Database Expert 鬯ョ�ォ�ス�ェ髯区サゑスソ�ス�ス�ス�ス�コ髣包スオ隴∵コキ�ク�キ�ス�ケ隴趣ス「�ス�ス�ス�ウ鬩幢ス「�ス�ァ�ス�ス�ス�ュ鬩幢ス「隴趣ス「�ス�ス�ス�ウ鬩幢ス「�ス�ァ�ス�ス�ス�ー

鬮ォ�エ陝キ�「�ス�ス�ス�ャ鬮ォ�エ鬲�シ夲スス�ス�ス�・鬮ォ�エ陝カ�キ�ス�」�ス�ッ髣厄スォ�ス�」

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。