2011-01-15 9 views
1

PHP5とMySQLの最新バージョンを使用して、ビジネスリスティングのインプレッションとクリックをトラッキングできるようにします。私の質問は、私がレポートを実行できるように、それを保存する上で最良の方法は何かを自分でやったかどうかです。私はちょうどリストID、ユーザーのIPアドレスを持っていたテーブルを持っていた前に、それはクリックや印象だけでなく、それが追跡された日付だった。しかし、データベースそのものが2GBに近づきつつあり、非常に遅いですが、問題の一部は、検索エンジンや基本的に誰かやリスティングページにアクセスするものを含む誰からのインプレッションとクリックを含む非常に簡単なスクリプトです。PHPと統計情報を保存

表示されている人物が実際に人で、スパイダーではないことを検出できる日付リストに更新されているAPIまたはファイルがありますか?不要な統計情報をデータベースに入力しないでください。ちょうど提案を探して、ちょうどヒットを取得し、夜間にcronジョブを取得して、各ipの各リスティングの日に集計し、別のテーブルに累積統計を格納するローデータベースを持っていますか?

また、どのタイプのデータベースにする必要がありますか? Innodb? MyISAM?

答えて

0

実際のユーザーとボットを区別する必要がある場合は、単純な解決策があります.JavaScriptを使用してレポートをサーバーに送信します。

リンクがあり、クリックされたタイミングをトラッキングしたいとします。その後、サーバーにまともなレポートを送信するonclickハンドラを追加します。ここでは例です:

<a href="/somepage" onclick="track('click', this.href); return true;">Some page</a> 

トラック機能はこの1つのようになります。

function track(action, data) { 
    var Img = new Image(); 
    Img.src = '/track.php?action=' + action + '&data=' + data; 
} 

ユーザーがリンクをクリックしたときにそのため、この場合には、このクリックの情報は、サーバーに送信されますこのjavascriptコードの部分。ボットはjavascriptを実行できないため、カウントされません。しかし、1つの欠点があります。ユーザーがブラウザでJavaScriptを無効にすると、トラッキングスクリプトはそのようなユーザーをカウントしません。明らかに、データを保存するにはtrack.phpスクリプトを実装する必要があります。

MySQLの質問に関しては、MyIsamは多くのintsertに対してより耐性があるように思えます。また、INSERT DELAYEDステートメントを見ることができます。夜間のcronジョブについてのあなたの考えは、私にとっては合理的です。統計表を日、週、月単位で分割することもできます。

+0

非常に興味深いアプローチです。もう1つの質問は、ページをリフレッシュしたり、リスティングに戻ってもう一度表示する人をどのように扱うことをおすすめしますか?今すぐipアドレスと日付はユニークなインデックスですので、そのインプレッションに対して一意のインデックスが見つかった場合やクリックすると、その人が同じリストを複数回見たことを示すカウンターフィールドが更新されます。それは大丈夫なアプローチだと思いますか?または、誰かが1日に複数回リストを閲覧したときに私は捨てるべきですか? – John

+0

@ジョンこれはあなたの目的によって異なります。あるユーザーが同じリンクを2回クリックしたかどうかを知る必要がある場合は、更新する必要があります(テーブルに「カウンタ」フィールドがあるとします)。この場合、INSERT ... ON DUPLICATE KEY UPDATEステートメントを使用できます。しかし、あなたがこれを必要としない場合は、レコードを再度更新する必要はありません。この場合、INSERT IGNORE文を使用できます。 – itsmeee

1

私はあなたが既にそこにあるものより良いものを創造することは決してないと思います。私はGoogleの分析を使用したいと思います。サイトの管理者側で使用する場合(クライアントを実行する可能性があります)は、常にgoogles apiを使用して必要に応じてデータをプルすることができます。私が見たいのはここが時間のhttp://code.google.com/intl/en-US/apis/analytics/

HTH乾杯-Jeremy

+0

私の主な関心事は、このサイトでこのリスティングを閲覧した人の数を見たいなど、必要なカスタムレポートです。 Googleアナリティクスでは、そのようなクエリをデータに対して実行できますか? – John

+0

短くても...分単位ではありませんが、年、月、日、時には取得できます。緯度、経度、その他の情報を取得してください。 http://code.google。com/intl/ja-US/apis/analytics/docs/gdata/gdataReferenceDimensionsMetrics.html –

0

99.999%...で、データベースに書き込むジュストます。

この種の作業では、毎日パーティション化されたMySQLテーブルがその作業を行います。

毎日同じパーティションに書き込み、昨日のパーティションでANALYZE PARTITIONを実行します。

関連する問題