小野マトペの業務日誌(アニメ制作してない篇)

はてなダイアリーの閉鎖をうけ、旧ブログ http://d.hatena.ne.jp/ono_matope/ から移行しました。続きは→ http://matope.hatenablog.com/

XMLパーサを全部正規表現でリプレースしようかなあとか

奇跡のちまちま具合によってバックエンド処理の改造はほぼ完了、あとは様子を見るだけなんだけど、やっぱり一日あたりに読み込むXMLページの数が10倍くらいになってる。今までは差分だけを読み込んでいたのを全部リロードするようになったんだから当然だけど。
うーん、転送量超過でレンタルサーバを追い出される心配もさることながら、パース処理にかかる時間が気がかり。
読み込むXMLが10倍になったということはXMLパースにかかる時間も10倍ってことで、しかも全部で数時間オーダーなので全然バカにできない。共用サーバのCPUも長時間占有するし、遠慮してスケジューリング減らさなきゃいけないしクロール所要時間も増えるし処理できるアイテム数も減るし、それはサービスの質の低下に直結するので、できればXMLパースを高速化したいんですよね。

[naoya@judy XML-Bench]$ perl rss.pl sample.rdf
Benchmark: timing 1000 iterations of XML::LibXML, XML::RSS, XML::Simple, regexp...
XML::LibXML: 2 wallclock secs ( 1.77 usr + 0.00 sys = 1.77 CPU) @ 564.97/s (n=1000)
XML::RSS: 93 wallclock secs (91.89 usr + 0.06 sys = 91.95 CPU) @ 10.88/s (n=1000)
XML::Simple: 372 wallclock secs (358.27 usr + 0.12 sys = 358.39 CPU) @ 2.79/s (n=1000)
regexp: 0 wallclock secs ( 0.13 usr + 0.00 sys = 0.13 CPU) @ 7692.31/s (n=1000)
(warning: too few iterations for a reliable count)
Perl で XML の処理はどれが速いかベンチ : NDO::Weblog

naoyaさんの"ローサベンチ"によると、PerlXMLを読むには正規表現が爆速らしい。今はlibXMLを使ってて(ていうか、このベンチを見てlibXMLに決めたんだけど)Perlの"モジュールの"中では超速いんだけど、さらに10倍オーバーのパフォーマンスを誇る正規表現に手を出してみようかなあ。保守性無くなるっぽいけど。
うん、ていうか俺はリプレースしたくてうずうずしてるんだけど、明らかに今はそんなことしてる暇は無いです。明後日の画像情報処理の課題にまだ手をつけてません。というわけでブログに書いて気を紛らわす。