2011-07-03 4 views
3

私はウェブサイトを利用してユーザーが記事を投稿できるようにしており、各記事の訪問者やその紹介者の完全な統計情報を著者に提供したいと考えています。実現はここではまっすぐに進んでいるようです。訪問ごとにデータベースレコードを保存し、集計関数を使用してグラフなどを描画します。大きな訪問統計情報を集めるアプローチ

私のサーバーは非常に強力ではないので、記事は24時間で約300kビューを受信し、わずか1ヶ月で統計テーブルには非常に大きな数値である約900万レコードが得られるという問題があります。

この種のタスクの解決策はありますか?精度を損なうことなく長期間の統計情報を格納できるアルゴリズムまたはキャッシング機構はありますか?

P.S.ここに私の元の統計表は次のとおりです。

visitid INT 
articleid INT 
ip INT 
datetime DATETIME 

答えて

6

であることがわかります。自家製の使用状況追跡ソリューション(他の回答で示唆されているようにGAとは対照的に)では、2つのデータベース設定があなたの探しているものかもしれません:

  • vistイベントをキャプチャする「リアルタイム」データベース。
  • 「リアルタイム」データベースからのデータが定期的に収集され、[オプションで]集約され索引付けされる「オフライン」データベース。

この設定の目的は、主に操作上の問題です。 「リアルタイム」データベースは、速い挿入のために索引付けされない(または最小限に索引付けされる)ことはなく、トラフィックが軽い場合、通常は毎晩、「オフライン」データベースがその日までに収集されたイベントをピックアップするので、

どちらのデータベースも非常に同じスキーマを持つことができます。または、「オフライン」データベースはさまざまな形式のアグリゲーションを導入できます。オフラインデータベースに適用される具体的な集約の詳細は、データベースのサイズをチェックしたいという要望や、重要であると思われるデータに応じて大きく異なる場合があります(ほとんどの統計/集計関数は情報損失を招きます。受け入れ可能であり、そうでないもの)。

使用ログの価値の「半減期」の性質により、詳細の相対値が時間と共に減衰するため、一般的な戦略は複数の層の情報を集約し、最後に収集されたデータ、 X日はほとんど変化しないままで、X日とY日の間で収集されたデータは部分的に集計され、最終的にY日より古いデータは最も顕著な情報(ヒット数など)しか保持しません。

1

あなたの統計データを自分で保存するには特に熱心でない限り、あなたは古いリモートでホストされたヒットカウンタよりもはるかに優れているGoogle Analyticsまたはその近代的な対応の一つを、使用して検討するかもしれません90年代のGoogleアナリティクスのPHPインターフェイスのAPIは、http://code.google.com/p/gapi-google-analytics-php-interface/

関連する問題