落ちた堕ちた墜ちた

講座中にサーバが固まってしまったようで、受講生・スタッフの方にはご迷惑おかけしております。たかだか60人程度の通常アクセスでApacheが落ちる事はありえないので、僕の手がけたシステムが問題なのは明白なのであります。


日程を見る際に1アクセスごとに全受講生の日程が入っている1MBのXMLファイルをSimpleXMLで展開しているのですが、これがなかなか重いです。ローカルで試してみても1回展開するだけで0.6秒ほど要しています。その他の処理を加えて1人あたり合計約2秒ですので、60人が一斉にこれをやるのはなかなか極悪というか非常識です。


さて、わざわざDOMを使っているから遅いのかと考え展開方法をSAXに代えてみようかとも思いましたが、下のような記事もあるので、もし速くなったとしてもほとんど体感できない程度なことが予想されます。試してみる余裕もあまりないのでSAXはとりあえず諦めます。
PHPのXML処理では、SAXよりSimpleXMLの方が速い - Goodpic


そもそも、これくらいのファイルサイズになるとファイルの読み込みだけでもそれなりに時間がかかってしまうんじゃないか。と思って試してみましたが0.08秒とそこまではかかっていません。やはりノードとして扱えるようにするのはそれなりに大変なようです。

・1MBのXMLファイル
file()で読み込み:0.08秒
simplexml_load_file()で読み込み:0.6秒

ファイルの分割はロジックが面倒になるのであまりやりたくありません。となると最後はPostgreSQLなんかのリレーショナルデータベースに頼るしかないのでしょうか。


今はXMLで速く処理する方法を模索してみます。まず現在行っている処理をプロファイリングした結果から遅いところをいじくって約2秒から1秒以下まで速度アップできました。しかし、上記の展開時間を考えるとどうやっても0.6秒以下には落とせないことになってしまいます。


ちょっと困りました。