まず、各ページにアクセスされたアクセスログの情報を保存する方法を考えてみたいと思います。

私が保存方法として思いついたのは以下の3つです。

■MySQLを使う

普段からMySQLを使ってWEBシステムを構築していたので、そのままMySQLを利用する方法を思いつきました。
MySQLだとSQL文を使ってデータの集計や検索がしやすいので、アクセスログの操作にはもってこいだと思いました。

しかし、問題となったのは「同時接続数」と「負荷」。アクセスする度にINSERT文を実行すると負荷がかかります。
アクセス解析用途のみでMySQLを使うなら別ですが、そうでない場合は、毎回SQL文を発行するというのは気が引けます。

同時接続数もサーバによって制限があるので、出来るだけリソースが不足しないように接続を制限しなければいけません。
http://dev.mysql.com/doc/refman/5.1/ja/mysql-config-wizard-connections.html


と言うわけで、MySQLを使うWEBシステムに、新たにMySQLを使ったアクセス解析は不向きではないか?と思いました。

■SQLiteを使う

MySQLが使えないのなら別のデータベース…となるとSQLiteが手軽で良い!と思い検討していました。

MySQLと同じようにSQL文が使えますし(ただし、使える文法には制限があります)、保存用データベースもテキストファイルの要領で、追加・複製出来るので、使い勝手が良いです。「ユーザごとのアクセス解析」を作る上でも、非常に便利だと思いました。

しかし、SQLiteは保存したログを削除してもファイルサイズが変わらないといった問題がある事を知りました。
アクセス解析なので、頻繁にログを削除する事はないかも知れませんが、「削除してもファイルサイズが減らない」という事実がどうも受け入れられません。

※ちなみにvacuumという機能を使えばファイルの最適化が出来るそうです。

■テキストファイルに保存する

自宅サーバの管理をしていて思ったのですが、ApacheやPostfixのログはテキスト形式です。サーバソフトでログを吐き出すものは、だいたいテキストファイルを使っているように感じます。

最初、「なぜ集計や検索がしづらいテキストファイルを使うのだろう?」っと疑問に思いました。

自分で実験してみても、テキストファイルの読み込み・一覧表示はデータベースを使った場合よりも、体感的に明らかに「遅い」と感じます。

しかし、ログを扱うソフトではテキストファイルを使っている。と言う事は「テキストファイルを使ってもログ解析出来る」と言えます。
(まぁ、「サーバにデータベースがインストールされてなかったら使えないから」と言う理由が大半でしょうが)


そこで、「PHP アクセス解析」でググったり、サーバ型のアクセス解析、『analog』や『AWstats』を調べてみました。

そうすると、なんとなくですが「こういう方法で保存する事により、テキストファイルを使ったアクセス解析でも、スムーズにログ解析出来る」という事が分かりました。

ちょっと言葉足らずですが、そのロジックを次の記事にてまとめたいと思います。