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

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

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

この記事をはてなブックマークに追加する この記事のはてなブックマーク数 | この記事をlivedoorクリップに追加する この記事のlivedoorクリップ数 | この記事をYahooブックマークに追加する この記事のYahoo!ブックマーク数 | この記事をdel.icio.usに追加する

概要

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

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

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

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

 の導入によってどの程度パフォーマンスが改善されるのか簡単に計測してみました。 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/ で計測を実施。回数と並列度が低いのは,爆速化されたとは云え,やっぱり mt-search.cgi は重いプログラムに変わりはないため少ない目に。

Apache Bench での計測結果

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

最新版のやバグレポートはSearchResultsCacheの trac レポジトリでも行っています。

いろいろ

  • 4.1 で動作確認済み。.3x,1.5x でも動作すると思います(未確認)
  • ですが商用利用は別途相談で(=゚ω゚)ノ

この記事を読んだ人はこんな記事も読んでいます ?

その他の関連する記事


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

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

この記事のトラックバック URL

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

Posted by
ぴろり ◆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.
at
2008/03/25 20:08
ID
iK3w1TGs

はい,そうなります。
データベースへの問合せだけでなく,このプラグインが最終的に生成されるHTML全体をキャッシュしてしまうためです。
ですので,データベースの問合せのみをキャッシュできればいいのですが難しいと思います。

Posted by
footbrain
at
2008/03/25 10:00
ID
g56XDyVs

「人気記事のランキングを表示する」のhottopic200.php.tmplと併用して利用したいのですが、
表示された人気記事のランキングも一緒にcacheされてしまいますよね?

mt-search.cgi の検索結果だけをcacheできればいいのですが、どうしたらいいのでしょうか?
それとも、hottopic200.php.tmplの読み込み方を工夫すればなんとかなりますか?

Posted by
ぴろり ◆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 以下にコピーしたのですが・・・。

コメントを投稿する

 (必須/公開)
 (必須/非公開)
 

コメントスパム防止のため投稿前に ランダムな数字 ? を入力してから投稿してください。 お手数ですがご協力のほど宜しくお願いいたします。(必須)