1

10,000 行の MYSQL では大した問題ではないと確信していますが、数十万行、さらには数百万行になるとどうなるでしょうか?

Cookie で問題を解決できると言う人もいるかもしれませんが、私は新人プログラマーなので、Cookie を使用すると問題が解決するというよりも、問題が発生する可能性が高いと考えています。

代替手段はありますか?または、IP に依存しないカウンターを使用する必要がありますか? 私のアプリケーションでは、このカウンターはアイテムの販売者のみが表示でき、ユーザーは表示できません。ユーザーの中には、カウンターをいじって何度も更新したい人もいるかもしれません。したがって、カウンターが表示されない場合、リフレッシュをいじることはありません。

前もって感謝します、

よろしく

4

2 に答える 2

1

IP アドレスは基本的に整数です。

それらを整数として保存し、対応する列でインデックスを使用します-クエリはそのように非常に高速になります。ipv6 アドレスは 32 ビット整数には大きすぎるため、代わりに varchar(16) を使用して、IP アドレスのバイナリ表現を保存することを検討してください。

アプリケーションのパフォーマンスに関しては、私の意見では、この種の統計には何らかのキャッシュ システムを使用することをお勧めします。たとえば、特定の時間間隔が経過した場合にのみ統計を再生成します。

于 2012-04-06T01:10:02.927 に答える
1

これにアプローチするには、さまざまな方法があります。1 つの方法は、item_id、ip_address、および日付のログを、3 つの列すべてで一意のインデックスを持つことです。次にINSERT IGNORE、テーブルに実行します-

CREATE TABLE `test`.`view_log` (
  `item_id` INTEGER UNSIGNED NOT NULL,
  `ip_address` INTEGER UNSIGNED NOT NULL,
  `date` DATE NOT NULL,
  PRIMARY KEY (`item_id`, `ip_address`, `date`)
);

INSERT IGNORE INTO view_log ($item_id, INET_ATON('$ip_address'), CURRENT_DATE);

注: これは IPv4 でのみ機能します。IPv6 をサポートするには、別の方法で IP アドレスを保存する必要があります。

于 2012-04-06T01:10:38.773 に答える