2004年11月17日

「MySQL移行で表面化したバグ」MT導入と改造

データベースをMySQLに移行して以来、サイドバーにある“Recent Updates”が正しく表示されていなかった。

Wiki部分の改良によって正しく表示されていなかったエントリーの一部を修正した。 そういうエントリーは昔に書いたものであっても“Recent Updates”のリストのトップにきてもらわなくては困る。 ところがある程度以前のものはリストにでてこない。

Template\Context.pmのコードを追ったり、 デバッグ出力をだしたりして試行錯誤してみた結果、 どうやらこういうことらしい。

  • まずcreated_onにしたがって、とりあえずエントリーのリストを作成
  • MTEntryタグのlastnで指定された順番でリストを足きり
  • MTEntryタグにsort_byがある場合はソートしなおし

現在“Recent Updates”はlastn=20で上位20エントリーに制限してあるので、 20エントリー以前のエントリーは、そもそもsort_byで指定したソートの 対象になっていなかったというのが、事の真相のようである。

最初は、以前のperlのリスト処理だと全エントリーがソートの対象になるが、 データベース移行後はMySQL固有部分のコードがSELECT文発行の段階で LIMITとかをかけているのかとかデータベースがらみだろう と思っていたが、そうではなかったらしい。

とりあえずcreated_onでソートしたリストを作成している部分を、 ちゃんとsort_byの内容にしたがってソートするようにして問題は解決。

今回オブジェクトストアの部分をみていて分かったのだが、 MT2.6のコードはあまりデータベースを意識した作りにはなってないなぁ。 単純にデータの保存以外にはDBMSを使っていないので、 データへのアクセス速度の面以外ではあまりDBMSを有効活用していない感じ。

この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/83
「MySQL移行で表面化したバグ」へのコメント  コメントを書く
「MySQL移行で表面化したバグ」へのトラックバック
コメントを書き込む









メールアドレスを記憶する?


この記事の評価
悪い あんまり 普通 まあまあ 良い





@@@@