ためいきとシリアライズ

キャッシュしよう
http://perl-users.jp/articles/advent-calendar/2008/23.html


残念ながらオリジナルのDateTimeよりも遅くなってしまいました。約半分の速度に落ちました。

わかってはいたことなんですが、このベンチマークは悔しい・・・
正直オブジェクトでのベンチは見て見ぬフリをしていました。っていうのがすでに甘いですね。

Method::Cached でパフォーマンス・チューニングする際の勘所は以下の2点かと思っていて、

  • データをシリアライズする際のコスト
    • キャッシュのストレージIFに依存する
    • ストレージが perl on memory な形であればまったく気にならない(単純なハッシュなど)
    • mod_perl で prefork な環境だった場合に、実行するプロセスによって値が違う
  • メソッドの呼び出し元のパラメータをシリアライズする際のコスト
    • 単純なスカラーの配列であれば連結するだけだが、$self のメンバメソッドだった場合に一気に面倒なことになる(現状はユーザー定義におまかせして逃げている

そのどちらにも悩まされていました。


中量級なクエリをキャッシュできればまぁいいかな、という想定が甘かったことを認識しました。。。
精進します。


ちなみに余談ですが、このモジュールのデフォルトでの組み込みは Cache::FastMmap になっていますが、実際に自分が使う際は Cache::Memcached( ::Fast )だったりするので無難なインターフェースとして get / set / delete or clear を選んでいます。



さらにさらに余談を言ってしまうと。
svn head では mod_perl でも無理やり動くようにしてみてました。
現状 CPAN にあげてあるものだと動いていなかったという事実。