0

広告の広告 Web サイトを構築しています。各広告のビュー数のカウントを保存し、後日グラフに表示できるようにしたいと考えています。各ユーザーと各ユーザーについて彼らの広告。広告ごとに潜在的に大量のデータを格納するために mysql データベースを実装する最善の方法を決定するのに苦労しています。

次のように、各広告の各ビューのレコードを格納するページ ビューのテーブルを作成します。たとえば、広告 (id 1) に 200 のビューがある場合、テーブルには 200 のレコードが格納されます。

Advert_id (広告の一意の ID)

date_time (閲覧日時)

ip_address (広告を見ている人の一意の IP アドレス)

page_referrer (リファラーページの URL)

前述のように、サイトの各メンバーが各広告のビュー統計のグラフを表示する機能を作成して、各広告の合計ビュー数と、広告のビュー数を確認できるようにします。毎日 (指定された 2 つの日付の間) に表示され、各広告の 1 か月あたりのビュー数も表示されます。これは、date_time フィールドでグループ化して行います。

サイトが非常に大きくなり、たとえば 40,000 件の広告があり、各広告の平均ページ ビュー数が 3,000 である場合、テーブルには 1 億 2000 万のレコードがあることになります。これは大きすぎますか?また、グラフを作成するための mysql クエリは非常に遅くなりますか?

上記の表と方法は、これらの広告ビューの統計を保存するための最良の方法だと思いますか?それとも、これを行うためのより良い方法はありますか?

4

2 に答える 2

0

私は1日あたり50.000のユニークな訪問者がいるウェブサイトで働いていました、そして私はあなたと同じテーブルを持っていました。

テーブルは200〜500 MB /日まで成長していましたが、毎日テーブルを掃除することができました。

最良のオプションは、2番目のテーブルを作成し、毎日訪問者をカウントし、2番目のテーブルに結果を追加し、1番目のテーブルをフラッシュすることです。

最初のテーブルの例:

  • advert_id
  • 日付時刻
  • IPアドレス
  • ページリファラー

2番目の表の例(グラフ用):

  • advert_id
  • 日にち
  • 訪問者
  • ユニークな訪問者

unqiue訪問者をカウントするSQLクエリの例:

SELECT 
    advert_id,
    Count(DISTINCT ip_address), 
    SUBSTRING(Date,1,10) as Date 
FROM 
    adverts 
GROUP BY 
    advert_id, 
    Date

問題はパフォーマンスでさえありません(MySQL ISAMエンジンは非常にスマートで高速です)、問題はそのようなビッグデータのストレージです。


90%の統計ツール(グーグルアナリティクスやウェブアナライザーでさえ)は、リアルタイムではなく、1日1回だけグラフを作成しています。

そして、非常に良いアイデアは、関数ip2long()を使用してIPをINTとして格納することです。

于 2011-11-17T15:45:48.587 に答える
0

そのすべてのデータを本当に保存する必要がない限り、広告が表示されたときにカウントをインクリメントする方がよいでしょう。したがって、広告ごとに 1 行 (または広告の行に 1 列) しかありません。

もう 1 つのオプションは、これをテキスト ファイルに保存してからオフラインで処理することですが、一般的には、取得したデータを処理し、それをアプリケーション プロセスに組み込む方が適切です。

本当にすべてのデータを保存する必要がある場合は、(処理後に) ログ テーブルを毎週ローテーションすると、そのすべての情報を無期限に保存するオーバーヘッドが削減されます。

于 2011-11-17T15:39:10.230 に答える