進捗
参考リンク関連のバグ処理をひとまず完了。
smalldat形式による検索
以下で提案していた、レス部分を除いて検索する処理を実装してみたのだが、
http://d.hatena.ne.jp/www-db/20050726/p3
結果は…ほんのちょっとだけ速くなった。
Devel::Dprofを使って実行時間を計ってみた。*1
以下、通常の、レス部分も含めて検索する場合。
Total Elapsed Time = 1.909613 Seconds User+System Time = 1.751613 Seconds Exclusive Times %Time ExclSec CumulS #Calls sec/call Csec/c Name 46.3 0.811 0.811 317 0.0026 0.0026 SOV::App::Getlog::__ANON__ 16.9 0.297 0.297 8 0.0371 0.0371 Storable::pretrieve 6.22 0.109 0.109 1 0.1090 0.1090 SOV::App::Getlog::endPastlogSearch 3.60 0.063 0.201 13 0.0048 0.0154 SOV::DB::BEGIN 3.48 0.061 0.873 317 0.0002 0.0028 SOV::App::Getlog::nextPastlogSearch 2.74 0.048 0.339 11 0.0043 0.0308 SOV::App::Getlog::BEGIN 2.68 0.047 0.401 7 0.0067 0.0573 main::BEGIN 2.63 0.046 1.352 1 0.0462 1.3525 SOV::App::Getlog::prt_searchlog 1.83 0.032 0.032 10 0.0032 0.0032 LWP::UserAgent::BEGIN 1.77 0.031 0.047 8 0.0039 0.0058 SOV::Output::BEGIN 1.77 0.031 0.062 6 0.0052 0.0104 SOV::URL::BEGIN 1.77 0.031 0.030 4 0.0077 0.0074 SOV::App::Getlog::getCurrentQuery 0.91 0.016 0.016 3 0.0053 0.0053 vars::BEGIN 0.91 0.016 0.016 3 0.0053 0.0053 CGI::BEGIN 0.91 0.016 0.016 10 0.0016 0.0016 Exporter::as_heavy
以下、レス部分を除いて検索し、それに対するレスと孫レスを参照IDから検出する場合。
Total Elapsed Time = 1.458269 Seconds User+System Time = 1.301269 Seconds Exclusive Times %Time ExclSec CumulS #Calls sec/call Csec/c Name 26.4 0.344 0.344 167 0.0021 0.0021 SOV::App::Getlog::__ANON__ 15.6 0.204 0.204 8 0.0255 0.0255 Storable::pretrieve 8.45 0.110 0.839 1 0.1095 0.8390 SOV::App::Getlog::prt_searchlog 6.07 0.079 0.371 11 0.0072 0.0337 SOV::App::Getlog::BEGIN 5.99 0.078 0.078 1 0.0780 0.0780 SOV::App::Getlog::endPastlogSearch 5.99 0.078 0.201 13 0.0060 0.0154 SOV::DB::BEGIN 3.61 0.047 0.247 8 0.0059 0.0309 SOV::App::BEGIN 2.46 0.032 0.093 11 0.0029 0.0085 SOV::Logdata::BEGIN 2.46 0.032 0.047 10 0.0032 0.0047 LWP::UserAgent::BEGIN 2.38 0.031 0.030 10 0.0031 0.0030 SOV::Utility::BEGIN 2.38 0.031 0.432 7 0.0044 0.0617 main::BEGIN 2.31 0.030 0.030 76 0.0004 0.0004 Exporter::import 2.23 0.029 0.373 167 0.0002 0.0022 SOV::App::Getlog::nextPastlogSearch 1.23 0.016 0.016 1 0.0160 0.0160 Config::AUTOLOAD 1.23 0.016 0.016 10 0.0016 0.0016 CGI::_compile
下の場合、検索処理であるところのSOV::App::Getlog::nextPastlogSearch()およびSOV::App::Getlog::__ANON__の回数は減り、そのあとの、検索された投稿に対するレス投稿と孫レス投稿を検出する処理でそのぶんの処理時間がかかる(SOV::App::Getlog::prt_searchlog()内)。
わずかな実行時間の変化だが、メモリ使用量は約2分の1〜3分の1に減り、0.1秒の差でも30件積もれば3秒の差となるので、それなりの改善にはなったと思う。
でもやはりgrepというのは重くならざるを得ないのだなぁと感じる。*2