2007年09月18日

Erlang版 memcached でキャッシュデータの永続化をしてみました。

はてなブックマークに登録

幾つかの改変を行った ememcached ver 0.3 をリリースします。

主な変更点は、

  • ディスク書き込みによるキャッシュの永続化
  • キャッシュデータをディスクに書き込むことで再起動してもキャッシュデータ が消えないように出来るようになりました。
  • キャッシュデータのガベージコレクション
  • 以前のバージョンには Expire したデータが残り続けるという問題がありました。
  • autoconf/automake 化
  • ./configure && make でビルドできます。

ダウンロード: ememcached-0.3.tar.gz

Mnesia のテーブルタイプについて

Mnesia はテーブル毎に3種類のデータの格納方法が選択できます。

  • ram_copies
  • メモリに格納されます。ememcached-0.2 で使用していたタイプで高速ですが 再起動すると消えてしまいます。
  • disc_copies
  • ram_copies 同様データはメモリに保持しますが書き込む時はディスクにも書 き込みを行います、読み込み時にはメモリアクセスのみで済みます。
  • disc_only_copies
  • 書き込みと読み込みの両方ともディスクにアクセスします。

今回の ememcahed では設定ファイルで ram_copies と disc_copies を選択で きるようにし、disc_copies を使用することでデータが消えない memcached を実装する事が出来ました。

設定ファイル

mnesia_disc.cfg(Mnesia + データの永続化の設定、ソースパッケー ジの conf ディレクトリにサンプルとして置いてあります)

{port, 11211}.
{strage, {mnesia, [{table_type, disc_copies}]}}.

実行

autoconf/automake 化したことで以前のバージョンと起動方法が若干変わ ります。

% ./configure && make

起動します

% erl -pa ./src -noshell -s ememcached start conf/mnesia_disc.cfg
start node: nonode@nohost
load config: conf/mnesia_disc.cfg
table_type: disc_copies
server listening: 11211

これで再起動を行ってもデータが消えない様になりました。カレントディレク トリには Mnesia.nonode@nohost というようなディレクトリが作成されている はずです。この下に Mnesia データとしてキャッシュが保存されています。

ガーベジコレクション

以前のバージョンでは set されているデータを get した時に expire してい れば消す、という処理を行っていたのですが、get されなければデータは消え ずに貯まり続ける、という問題がありました。

今回のバージョンでは expire したデータを一定間隔で削除するガーベジ コレクタを別プロセスで起動します。

設定ファイルを以下のように書くと 10秒毎にガーベジコレクションが走り ます。

{port, 11211}.
{strage, {mnesia, [{table_type, disc_copies}, {gc_interval, 10}]}}.

autoconf/automake 化

最近の autoconf には Erlang のマクロが含まれているようなので使用してみ る事にしました。AC_ERLANG_NEED_ERL や AC_ERLANG_NEED_ERLC を使うことで で erlang の環境をチェック出来、適切な場所へインストールすることが容易 に記述できました。

まとめ

今回は新しい ememcahed の説明と使用方法をメインに紹介しましたが、今後 は mnesia の挙動や、書き込みリクエストの同期性、select や QLCなどの API の詳細についても触れていきたいと思います。

klab_gijutsu2 at 16:34│Comments(0)TrackBack(0)Erlang 

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
Blog内検索
Archives
このブログについて
DSASとは、KLab が構築し運用しているコンテンツサービス用のLinuxベースのインフラです。現在5ヶ所のデータセンタにて構築し、運用していますが、我々はDSASをより使いやすく、より安全に、そしてより省力で運用できることを目指して、日々改良に勤しんでいます。
このブログでは、そんな DSAS で使っている技術の紹介や、実験してみた結果の報告、トラブルに巻き込まれた時の経験談など、広く深く、色々な話題を織りまぜて紹介していきたいと思います。
最新コメント