Home » June 2005 » Tagwire Pluginの予告

Tagwire Pluginの予告

下記エントリーでも微妙に予告してきました通り、Movable Typeにタグ管理機能を追加するプラグインの高速化を行っています。

AllKeywords PluginとTags Plugin

あらかた動作するものができたのでそろそろ公開する予定ですが、CI的にTagという単語が入っていない「AllKeywords」という名前での普及は限界があるような気がするので、新たに「Tagwire Plugin」という名前を与えることにしました。この変更によって使用感はほとんど変化しませんが、MT-XSearchと連携させている方はテンプレート名などに修正が必要になります。

Tagwire Plugin(AllKeywords Plugin)の特徴は以下の通りです。

  • 日本語タグをサポートしています。残念ながらTags Pluginでは使えません。
  • 柔軟なタグ形式を扱えます。
  • カテゴリーを汚しません。エントリーのキーワード部分だけを使用するため、カテゴリーは本来の利用方法ができます。
  • full-fledgedなタグハンドリング機能を提供します。利用されているタグやその個数をリストアップする機能、指定したタグにマッチするエントリーをリストアップする機能、類似度が高い(現在のエントリーとマッチするタグの数が多い)エントリーをリストアップする機能などが利用できます。
  • 静的にタグアーカイブを生成しない代わりに、MT-XSearchと連携して動的なタグアーカイブの生成をサポートします。タグアーカイブの再構築コストがかからず、また複数のタグを含むエントリーを抽出することもできます。

Tagwire Pluginでの改善点は以下の通りです。

  • タグの入力形式を自然かつ柔軟にしました。
    はてなのように"["、"]"で囲んだ文字列、シングルクォート・ダブルクォートで囲んだ文字列、「,|;」で区切られた文字列、空白で区切られた文字列をタグとして認識するようになります。これに伴い、MTAllKeywords, MTEntryAllKeywordsのdelimiterオプションは廃止されます。
  • 高速化その1。
    エントリーの保存時にPluginDataとしてタグのインデックス情報を生成・保存します。再構築時にはこの情報を参照することで効率を改善します。
  • 高速化その2。
    PluginDataから取得したインデックス情報(PluginDataが使えない場合はDBデータから生成したインデックス情報)をプラグイン内でキャッシュし、複数のTagwireのタグ、複数のテンプレートで再利用することで効率を大幅に改善します。

さてどのくらい高速化されたのかが一番の関心事だと思います。結論から言うと、このブログを「すべて再構築」するのにかかる時間が190秒から96秒に短縮(゚□゚)されました。2倍に高速化されたというよりむしろ今までタグの処理だけで再構築時間の半分以上を使っていたという驚愕の事実!! 比較してはいませんがTags Pluginと比較しても悪くない速度になっていると思いますので、リリースにご期待ください。

とりあえず開発版: http://code.as-is.net/svn/public/tagwire/trunk/

2005-06-28追記: 英語ブログではリリースしてあります。日本語のドキュメント書きが遅れているので少々お待ちください。英語ブログではなぜかドイツ人から集中的にコメントとトラックバックがやってきています。

2005-07-01追記: というわけで日本語のブログでも公開しました。下記のエントリーをご参照ください。

このエントリーのトラックバックURL: http://as-is.net/mt/mt-tb.cgi/284

Links referred to this entry

Comments (4)

  1. 開発版を導入してみたところ、400秒近くかかっていた再構築時間が100秒ほどになって驚愕しました;w;

    ここでフィードバックしていいのかどうかわからないですが、使ってみて気づいたのは、MTMostRelatedEntriesでcase_sensitive="0"にすると関連のなさそうなエントリが出てきたことです。MTは3.17日本語版です。

  2. フィードバック大歓迎です。今の開発版ではバグを解消できていると思います。

    プラグインの先頭のあたりにある変数を変更すると遊べます。
    my $ENABLE_PD_INDEXES = 1; # PluginDataを使用する・しない
    my $ENABLE_REQ_CACHE = 1; # Request Cacheを使用する・しない

    私のところでは、最適化手法の組み合わせによって再構築時間が以下のようになります。
    (PD, REQ) = (0, 0) 188sec
    (PD, REQ) = (0, 1) 102sec
    (PD, REQ) = (1, 0) 98sec
    (PD, REQ) = (1, 1) 98sec

  3. 最新版にしたところ意図したように動作しました。ありがとうございます!

    >プラグインの先頭のあたりにある変数
    うちのロリポップのブログでは両方onが125秒で最速みたいです。ロリポが込み合う20時前後で125秒は嬉しい数字でしたw

    >フィードバック大歓迎です
    開発版ですし、たぶんおおかたの挙措動作は把握済みのことと思いますが、いろいろやってみたところもうひとつみつけました。EntriesWithTagsとEntriesWithKeywordsでlastnの値が無視されているような気がします。

  4. 自分で使わないのですっかり失念していました。

    (1) MTEntriesWithXXやMT-XSearchでcreated_on以外でソートできない
    (2) AllKeywordsの名残で無駄なコードがある
    というのは気が付いています。(1)はもう仕様にしてしまおうかと思っています。

Post a comment

Remember me?