MovableTypeの検索機能を爆速にするプラグイン:SearchResultsCache

Posted by
ぴろり
Posted at
2008/03/08 22:43
Trackbacks
関連記事 (0)
Comments
コメント (5)
Post Comment
コメントできます
Category
プラグイン カテゴリ

 MovableType に標準で搭載されている検索用 CGI (mt-search.cgi) は遅い遅いと不評ですが、検索結果をキャッシュすることで爆速化するプラグインを書いてみました。公開された記事が即時に検索対象に含まれる必要のない個人サイトのように、検索結果の内容について即時性を強く求められないケースであれば、運用上十分な効果を期待できます。プラグインのファイルを一つ導入するだけで、mt-search.cgi のパフォーマンスが5~10倍程度に向上します(当サイト計測比)

このエントリーをはてなブックマークに追加  

概要

 以前に当サイトで公開した KeyCached プラグインは、そもそもこの検索用 CGI の動作パフォーマンスを少しでも改善する意図で開発しました。この KeyCached プラグインを導入することによって、MovableType テンプレートから検索結果をレンダリングする部分についてはパフォーマンスを改善することができましたが、最大かつ主たるボトルネックであるデータベースへの問合せやパターンマッチ処理についての決定打とはなりませんでした。

 今回、作成した SearchResultsCache プラグインでは、mt-search.cgi 内で実際に検索処理を行っているメソッドそのものを乗っ取ってしまいます。もし以前と同じ検索条件で問合せが行われた場合、正直にデータベースへの問合せとテンプレートの構築を行わず、以前に生成された HTML のキャッシュをそのまま返すようにします。そして、同じ検索条件での検索が行われていない場合にのみ、データベースへの問合せを行うようにしました。このキャッシュの生存時間は任意に設定することができるので、各々のサイトの運用に合わせて適切に調整されるべきです。

上記の検索はいずれも静的な URL で表示されていますが、内部的には mod_rewrite を利用して mt-search.cgi が起動されています。この話の続きはまた今度…

動作パフォーマンスの測定

 プラグインの導入によってどの程度パフォーマンスが改善されるのか簡単に計測してみました。Apache Bench を利用して 10 回の問合せを行った結果は以下の通りです。

処理時間
SearchResultsCache 最小[ms]中央値[ms]最大[ms]速度比
なし 9,32611,65916,7571.0
あり
キャッシュなし
7051,7289,8926.7
あり
キャッシュあり
7141,0662,37010.9

/ab -n 10 -c 1 http://www.magicvox.net/archive/keyword/MovableType で計測を実施。回数と並列度が低いのは、爆速化されたとは云え、やっぱり mt-search.cgi は重いプログラムに変わりはないため少ない目に。

Apache Bench での計測結果

 キャッシュ動作には、以下のCPANモジュールが必要になります。必要に応じてインストールしてください。展開されたファイルのうち拡張子が pm のものを /extlib 以下にコピーすれば動作します。

いろいろ

  • MTOS 4.1 で動作確認済み。MT3.3x、MTE1.5x でも動作すると思います(未確認)
  • ライセンスは GPL ですが商用利用は別途相談で(=゚ω゚)ノ

ダウンロード

このエントリーをはてなブックマークに追加  



関連記事/トラックバック

関連記事/トラックバックはまだありません

この記事にトラックバックを送るには?

寄せられたコメント (全 5 件中、最新 5 件まで表示しています)

Posted by
ぴろり ◆OLEEi.VOX.ぴろり ◆OLEEi.VOX.
at
2008/04/04 16:08
ID
6q10vgSU
MT(OS)4.15 において関数名に変更があり,別バージョンとなりました。
4.1 をご使用の方は
http://lab.magicvox.net/trac/mt-plugins/browser/SearchResultsCache/tags/1.0.0/plugins/SearchResultsCache/SearchResultsCache.pl
4.15 をご使用の方は
http://lab.magicvox.net/trac/mt-plugins/browser/SearchResultsCache/tags/1.1.0/plugins/SearchResultsCache/SearchResultsCache.pl
をご利用くださいm(_ _;)m
ただ,MT4.15から検索結果を標準でキャッシュする様子なので,ほぼ不要かもしれません。
Posted by
ぴろり ◆OLEEi.VOX.ぴろり ◆OLEEi.VOX.
at
2008/03/25 20:08
ID
iK3w1TGs
はい,そうなります。
データベースへの問合せだけでなく,このプラグインが最終的に生成されるHTML全体をキャッシュしてしまうためです。
ですので,データベースの問合せのみをキャッシュできればいいのですが難しいと思います。
Posted by
footbrainfootbrain
at
2008/03/25 10:00
ID
g56XDyVs
「人気記事のランキングを表示する」のhottopic200.php.tmplと併用して利用したいのですが、
表示された人気記事のランキングも一緒にcacheされてしまいますよね?
mt-search.cgi の検索結果だけをcacheできればいいのですが、どうしたらいいのでしょうか?
それとも、hottopic200.php.tmplの読み込み方を工夫すればなんとかなりますか?
Posted by
ぴろり ◆OLEEi.VOX.ぴろり ◆OLEEi.VOX.
at
2008/03/16 20:37
ID
.OvgIVhg
管理画面から[システム]-[ログ]と進んでみてください。
他に必要なライブラリがあれば,そのライブラリが足りないとエラーメッセージが表示されていると思います。
Posted by
ラースラース
at
2008/03/16 19:03
ID
xoUI9OnQ
読み込みに失敗しました。と出てしまいます。
環境は Movable Type version 4.1  :: Professional Pack 1.1  です。
パーミッションを755に変えたりしてみましたがダメでした。
pluginsフォルダにアップロードと
    * Cache - the Cache interface
    * File::NFSLock - perl module to do NFS (or not) locking
    * Date::Parse - Parse date strings into time values
も/extlib 以下にコピーしたのですが・・・。

コメントを投稿する

 
 (必須, 匿名可, 公開, トリップが使えます)
 (必須, 匿名可, 非公開, Gravatar に対応しています)
 (必須)
スパム コメント防止のため「投稿確認」欄に ランダムな数字 CAPTCHAについて を入力してから送信してください。お手数ですがご協力のほど宜しくお願いいたします。