1

article多くの記事を含むテーブルがあります。各記事の閲覧者数を追跡したい。これが私の考えです。

私はviewers行を持つテーブルを持っています: id, ip, date, article_id.

article_id記事の引用ですFOREIGN FIELDidそのため、ユーザーが記事を開くと、ユーザーの IP アドレスがテーブルに保存されます。

これはまともなアプローチですか?これは個人サイト用であり、非常に大きな Web サイトではありません。

編集:各記事ページに閲覧数を印刷したい。

4

6 に答える 6

1

Google アナリティクスなどのツールを使用します。これにより、作業がはるかに精巧になり、数分で起動して実行できるようになります。IP アドレスよりもユニークな訪問者の方が重要です!

オンプレミス ソリューションが必要な場合は、まさにこの目的のための PHP フレームワークであるPIWIKを見てください。

于 2013-05-29T12:10:29.150 に答える
1

ビューアの数を表示する必要がある頻度によって異なります。一般的なクエリは次のようになります。

select count(*) from viewers
where article_id='10'

時間が経つにつれて、viewersテーブルが大きくなります。1 年か 2 年後に 100 万件のレコードがあるとします。各記事ページに閲覧者数を表示している場合、または閲覧者が最も多い記事を表示している場合、外部キーがインデックス化されていても、パフォーマンスに影響を与え始めます。ただし、何百もの記事を追加し、それぞれに何千人もの閲覧者がいる場合は、これが発生します。

より最適化された解決策は、記事テーブルに閲覧者の数を保持し、それを使用して結果を表示することです。エントリが重複しないようにするために、既存の Viewers テーブルも必要です (記事を 10 回読んだ同じユーザーは、10 回ではなく単一のエントリとしてマークする必要があります)。

于 2013-05-29T12:09:45.307 に答える
0

はい、これは、各記事のビュー数を表示するために何らかのキャッシュを作成する場合に適したアプローチです。ユーザーが Web サイトを開くたびにビューをカウントするのは最適ではありません。

  1. SQL Server で実行できます。のようなものがありmaterialized viewます。( https://code.google.com/p/flexviews/ )

    select article_id, count(*) as views from viewers group by article_id
    
  2. または、ファイルにキャッシュして、X 回ごとに更新することもできます。

  3. 記事を閲覧したユーザーを保存するには、AJAX を使用することをお勧めします。ユーザーが Web サイトを開くと、別の「スレッド」が Web サイトを呼び出して、ユーザーをビューアーとして追加します。データベースが遅い場合でも、Web サイトの読み込みが遅くなることはなく、Web スパイダーもカウントされません。

于 2013-05-29T12:15:16.503 に答える
0

データベースに何を保存するかによって異なります。この特定の記事にアクセスしたユニーク ユーザー数 (日付と IP を含む) を正確に知りたい場合、これは合理的な方法です。ただし、表示する数値のみが必要な場合は、記事テーブルを変更して、visit_counter を含む新しい列を含め、Cookie を保存して、同じユーザーのカウンターが増加しないようにすることができます。

于 2013-05-29T12:06:49.363 に答える
0

この設計では、同じユーザーが何度もそれを開いて、エントリを挿入する前にチェックを入れなければならないか、同じ IP アドレスを複数回挿入するが異なるタイム スタンプを挿入すると、1 つの問題があります。

人気のあるサイトのほとんどは、そのクライアントまたはユーザーがその記事を数回開いたとしても、1 つの IP アドレスを 1 つのビューと見なします。

解決策を考えることができます。

  1. 単一のチェックであなたのアプローチ。同じクライアントが再度開いた場合は、挿入しないでください。または、カウンターを取得するときに ID でグループ化します。
于 2013-05-29T12:05:39.190 に答える