いつきコンテンツ

ヘルプ

カウンター


2007-11-18 tDiary+MySQL高速化大作戦

なんか昨日から、tDiary+MySQLと闘っている気がしてなりません。

14時間くらいは闘ったゾ?(疲れた)

[日記][tDiary] tDiaryのDB化

公式で配っているcontribにもdbi_io.rbがあるのだが、重大な欠陥が。

公式のdbi_ioは開発版のtDiary 2.1.4向け。しかもDB化に関して、クリティカルなポイントが修正されている(;´Д`)

とりあえず、tDiary 2.0.4では月単位で日記・リファーデータを引っこ抜いていく(そしてリファーデータを適当に書き換えて、月単位で書き込む)という、頭悪いシステムになってるっぽいです(;´Д`)2.1.4でそれが解決されているかは疑問ですが。というか、ソースコードを見る限り、もっと頭悪くなってる予感が……プラグインでやるのKAYO! IO周りはまとめろよ!

というわけで、まとめてみた。

……劇的に遅い。なぜ? と思ってよく考えたら、1ページ表示するのに1ヶ月分の全リファーを読み込んでるじゃありませんか。アホですか。そりゃ1アクセスでも500だったりタイムアウトしたりするわ!

ウチの日記では編集モード以外ではリンク元を表示しない設定にしているので、そんな無駄な処理はイリマセン(キッパリ

でも、restore_refererで全く読まないコード(いきなりreturn)にすると、編集モードでも読めないんだよねー。というわけで、勝手にdbi_io.rbのtransactionの引数を(date)から(date,getref=false)へ書き換えて、restore_referer(diaries)をrestore_referer(diaries,getref)にして、restore_referer(diaries,getref)の最初で

          if getref != true then
return
end

とする。んでもって、~/tdiary.rbの1200行目前後にある、TDiaryEditのinitializeの@io.transaction( @date ) do |diaries|となっている所を

@io.transaction( @date ,true ) do |diaries|に書き換える。我ながらいい加減な変更だ。

んでもって、適当にテーブルつくってrestore_refererとstore_refererでデータ取得・格納が出来るようにする。ついでにdefaultioいらないので、cache周りを全部コメントアウト(笑)

最初、「表示するとなぜか2回」DbiIOのtransactionを呼び出す謎の挙動を示す。色々ダンプして遊んだ結果、どうやらリンク先の日付と、最新の日付の2回分呼び出されてるっぽい。defaultioでもそうだったので、これは仕様だろう(笑)

というわけで、それに習って適当にソースをいじくり回す。

超・アドホックだが、restore_refererでリファーを読み込まないため、store_refererのdiary.each_referer( diary.count_referers )が、変更された分のみの更新となる。まぁ、これで良しとしよう。

最終的には日記・コメント・リファーをDBMSにおねがいする(aとかcounterは勝手に作ってくれるのでパス)状態で、5407回/5分位は返事を返せるようになった。うむ、満足。

所で、tDiary 2.1.4って何がどう変わっているのだろう?

あとで試してみよう。うん。

ちなみに2.1.4でも同じコードで動いたら、まとめて公開します。

[日記][tDiary] tDiary 2.1.4 えらい軽くなってるな…。

同時実行性もアップしてて、DBMSが不要なくらいだ。

というわけで、移行を考える今日この頃。

[日記][tDiary] tDiary 2.1.4にパッチを当てて、2.0.4と同じ感じにしてみる。

とりあえず、最初に喰らったのは予想通り500 Internal Server Error。

どっか間違ってると思いましたさ(笑)

どこかなーと探してみると、index.rbに仕掛けた

rescue DBI::DatabaseError => e

でuninitialized constant DBI (NameError)と言われていた。

なんじゃらほい?と思ったが、そう言えば今defaultio使って構築してるから、DBIなんて読み込んでないのねん(笑)というわけで

require 'dbi'

こんな感じの行を追加。

あと、if-elsif-else-endの対応を1個end書き忘れていて怒られた。

と、ここまではスムーズだったのだが…

一番問題解決に時間がかかったところは、各セクションの頭にある、◆でリンクが張られないこと。

ソースコードを追い回した結果、misc/plugin/blog-style.rbでsubtitle_linkが上書きされていた(苦笑

blog-style.rbのタイトルを変える機能は使いたいので、subtitle_linkをコメントアウトした。

よし、大体予定通りの動きをした!(笑)

細かいチェックとかは明日にしよう。

はふー、疲れたよー……

ざっくりと、tDiary-2.1.4とパッチバージョンのdiffを取る。939行。約33Kバイト。

疲れた……

Last Update: 2007-11-19 00:47:44

カレンダー

2003|04|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|07|08|11|
2013|03|05|08|
2014|01|
2015|04|05|06|07|09|10|12|
2016|01|03|05|06|10|11|
2017|06|
2018|05|08|09|10|11|
2019|04|08|12|
2020|03|08|09|11|
2021|05|
Generated by tDiary version 4.1.2 + amazon(DB Patch 0.2.1) + counter(DB Patch 0.2) + IKPatch version beta 4.0.1.
Powered by Ruby version 2.1.5-p273 with ruby-fcgi