2011-12-20 14 views
6

分析サービスの適切な構造を構築するにはどうすればよいですか?現在、私はクライアントのIDでページを訪問するすべてのユーザーに関するデータを格納する1つのテーブルを持っているので、後でクライアントは特定の日付の統計を見ることができます。トラフィック分析システム用の適切なデータベースを構築するにはどうすればよいですか?

私は1000人のユーザーがいて、誰もが毎日自分のサイトに約1,000人のインプレッションを持っているとします。毎日1,000,000(1M)の新しいレコードを1つのテーブルに取得します。 2ヵ月後(テーブルが6000万レコードに達したとき)にはどのように機能しますか?

私はちょうど時間がたってから、データを引き出すためのPHPクエリが本当に重くて遅く、多くのリソースを取るようになると思います。それを防ぐ方法は?

似たような仕事をしている友人と、すべてのクライアントのために新しいテーブルを作るつもりですが、これは正しい方法ですか?

ありがとうございます!

+0

本を参考にしてください。 – linuxeasy

+1

@ linuxeasyどちらですか? – k102

答えて

1

Consider this Link to the Google Analytics Platform Components Overview pageとし、システム全体のアーキテクチャに基づいてデータをデータベースに書き込む方法に特に注意してください。

データベースにすべてをすぐに書き込むのではなく、すべてをログファイルに書き込んでから、後でログを処理することができます(トラフィックがあまり高くないときなど)。その日の終わりには、データベースへのすべての書き込みを行う必要がありますが、それらのバッチを一緒にバッチして実行すると、そのような負荷が許容範囲内にある場合に実行すると、システムのスケーラビリティが大幅に向上します。

+1

これは答えではありません、コメントにする必要があります! – k102

+0

スケーリングについて何も説明しないリンク。誤解を招くような-1。 –

+0

+1これは良いリンクで、トピックに関連しています。それはOPがそれを読むのを助けるでしょう。 – PiTheNumber

-1

このようなデータをインプレッションに正規化できます。

Client Table 
{ 
    ID 
    Name 
} 


Pages Table 
{ 
    ID 
    Page_Name 
} 

PagesClientsVisits Table 
{ 
    ID 
    Client_ID 
    Page_ID 
    Visits 
} 

最終的な表の訪問数を増やすだけです。最大レコード数は(クライアント数×ページ数)

+0

あなたの答えをありがとうが、それはこのようには機能しません。統計はかなり深く、訪問者のIPアドレスと国の訪問ごとに新しいレコードがテーブルに格納されます。つまり、訪問数に実際に数字を書くことはできません。 – Ricardo

+0

入手しました。お客様のクライアントが訪問者と同じだと思いました。あなたは "クライアント"テーブルを "ビジター"テーブルに置き換えるだけで簡単にこのテクニックを使用することができます。あなたのアプリケーションを少し良く理解することなく、コメントするのは難しいです。 –

-1

6000万レコードのテーブルを持つことができます。それがデータベースの目的です。しかし、あなたはテーブルにいくつのフィールドがあるか慎重にすべきです。また、各フィールドにはどのデータ型(=> size)があります。

データに関するレポートを作成します。それらのレポートに本当に必要なデータを考えてください。たとえば、すべてのページでユーザーあたりの訪問数のみが必要な場合があります。単純なカウントがトリックを行うだろう。

毎晩レポートを生成し、その後に生データを削除することもできます。

だから、それについて読んで考えてください。

+0

リンクでは、データベースのスケーリングに関する情報はまだ0になります。 –

+0

物事を簡素化する素晴らしい説明! – linuxeasy

2

問題は、I/Oバインドシステムに問題があります。 1日に100万レコードは1秒あたり約12回の書き込みクエリです。それは達成可能ですが、同時に書き込み中にデータを取り出すと、システムはHDDレベルでバインドされます。

適切なデータベースエンジン(MyoAMではなくInnoDB)を使用するなど、実行するI/Oボリュームをサポートするようにデータベースを構成する必要があります。十分なHDDサブシステム(RAID定期的なドライブではなく、どこかで失敗する可能性があります)データベースを最適に設計し、EXPLAINでクエリを検査して、どこが間違っているのかを確認します。別のストレージエンジンを使用することもできます。個人的にはTokuDBもし私があなただったら。

また、PHP側ではなくデータベース側でクエリ、ソート、フィルタリングを行うことを心から祈っています。

+0

InnoDBエンジンを使用することをお勧めしますか?その上に、実際に誰かがシステムを設計するのに役立つ答えを下降させることを選択します。誰にも役立つそのような態度で、あなたはSOの質問に答えるべきですか? –

+0

私の態度に問題はありませんが、あなたと! PHP、ハードウェア、そしてそれぞれのすべてからシステムを設計することができます。あなたの態度をよりよく修正して、すぐに物事を得る! – linuxeasy

+0

私は申し訳ありませんが、私はそのような幼稚な議論に、彼が何について話しているのか分からないような人はいないでしょう。 –

関連する問題