我很确定对于 10,000 个 MYSQL 行来说这不是什么大问题,但是如果我们有数十万甚至数百万行怎么办?
有人可能会告诉我 cookie 可以解决问题,但由于我是一名新手程序员,我认为使用 cookie 可能会引发比解决问题更多的问题。
还有其他选择吗?还是我应该坚持使用非 IP 敏感计数器?在我的应用程序中,此计数器只能由商品的卖家查看,而不能由用户查看,其中一些用户可能想要使用计数器并多次刷新。因此,如果他们没有看到计数器,他们就不会玩弄刷新。
提前感谢,
问候
IP
地址基本上是整数。
将它们存储为整数并在相应的列上使用索引 - 这样查询将非常快。请记住,ipv6 地址对于 32 位整数来说太大了,因此您可能需要考虑改用 varchar(16) 并存储 IP 地址的二进制表示形式。
关于应用程序的性能,在我看来,使用某种缓存系统进行此类统计信息总是好的。例如,仅当经过一定时间间隔时,才重新生成统计信息。
有很多不同的方法可以解决这个问题。一种方法是拥有item_id、ip_address和日期的日志,并在所有三列中具有唯一的索引。然后在表格中做一个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 地址。