去年、php+mysqlでサイトのアクセス解析のシステムを作成し納品しました。

仕組みとしては単純で1アクセス、1レコードでテーブルに保存して解析画面で様々な条件クエリで合計数やグラフなどを表現しています。

現在、問題が発生していて。解析画面でエラーがでてしまいます。
レコード数が20万近くになり処理ができなくてエラーが出ているようです。

色々な解決方法があると思うのですが最適だと思う処理をお教えください。

回答の条件
  • 1人2回まで
  • 登録:2009/04/09 15:49:21
  • 終了:2009/04/16 15:50:02

回答(6件)

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402009/04/09 16:24:58

ポイント19pt

1アクセス、1レコード

レコード数が20万近くになり

このデータ形式でこの量になってくると力業では解決は難しい。


一般的にはリアルタイム解析を止め、別テーブルとして解析後のデータ(もしくは解析しやすい中間データ)に

バッチ処理で変換し、そこから解析データを引っ張ってくるように変更するのが無難かと。

通常のアクセス解析であれば、1分1秒に対し正確なデータを求めることは少ないし。


データ取得部分がごっそり変更になるだろう事がデメリットではあるが。

id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332009/04/09 19:17:02

ポイント18pt

アクセスログは、MySQLのようなRDBMSに格納するのではなく、テキストファイルにした方がいいでしょう。


RDBMSは、検索・閲覧といった再利用(参照)を頻繁に行うケースでは威力を発揮しますが、アクセスログのように、参照より書き込みの方が多い場合には処理時間がかかるだけで、何のメリットもありません。

アクセス解析は毎秒毎秒行うような性質のものではありませんから、テキストファイル処理で十分対応できます。


もしApacheを併用しているのでしたら、Apache の生ログ(テキスト)をそのまま解析する方がシステムに負荷をかけません。

id:hijk05 No.3

hijk05回答回数1307ベストアンサー獲得回数232009/04/09 17:30:25

ポイント19pt

(1)非同期処理にする

(2)中間データを随時作成して、集計するレコード数を少なくする

(3)10万レコード単位にテーブルを別にして、処理を行う。

  10万レコードごとにテーブルが増えるという形にする

3つぐらいが対策として考えられます。

id:tomopo No.4

matsuoki回答回数15ベストアンサー獲得回数32009/04/09 19:21:24

ポイント18pt

あんまりキレイじゃ無いので好きな処理方法じゃ無いんですが、月が変わる毎にテーブルを作って、データの格納先を変える、という方法も有ります。

某市のとある監視システムがそうなってました。そのシステムは、1分あたり100以上のレコードが発生します。

cronなりphpなりで、毎月1日(か、出来れば前の月の最後あたり)に create tableをしてテーブルを作ります。

欠点

・取ってくるデータによってテーブルが変わってしまうので、その部分の変更が必要になるかもしれません。

例:取ってくる日付・期間からテーブル名を取得してunionクエリを発行する。期間が長いとSQL文が超大作になりそうです。

・ストアドプロシージャにした場合、コストがあまり低くなりません。(mysqlでテーブル名が可変なストアドが作れるのかどうか知りませんが。。。)

id:imaiworks No.5

imaiworks回答回数3ベストアンサー獲得回数02009/04/09 21:14:25

ポイント18pt

1テーブルで20万はそこそこ厳しいですが、

パーティショニングで日ごとに分割するのはどうでしょうか?

http://dev.mysql.com/doc/refman/5.1/ja/partitioning-subpartition...

集計も日ごとにwhere指定すると思いますから、早さも求めれます、、

が、1024個までしか分割ができないので、1日1分割だと3年持たないのが厳しいところで、

2日に1分割とか、レコード数にあわせてパーティショニング設計が必要です。

id:sphire No.6

sphire回答回数115ベストアンサー獲得回数122009/04/10 00:41:53

ポイント18pt

MySQLで20万レコードなんでざらです。(共用サーバなんかだと厳しいかもしれませんが)

期間で区切って、過去のデータをバッチでサマリーテーブルに移していきましょう。

検索のパターン分のサマリーを作ったって、全データを生で残すよりは少なくなるのでは?

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません