我正在开发一个系统,需要在MySQL表中记录页面的每个视图。仅当访问者在过去24小时之前未访问该页面时,才会记录该视图。我想知道在性能和数据库大小方面这样做是否会成为一个问题。
需要这样做的网站平均每天有大约60,000个独特的综合浏览量,因此每天大约增加60,000个新行(每2秒不到1个)。该表只有3列:i_id
,ip_address
,timestamp
。 i_id
是另一个表的外键。
该表将在每天结束时使用CRON脚本清除。
这样做会立即造成数据库紧张吗?例如,如果网站流量激增(它经常发生),一天内可以拍摄超过200,000次综合浏览量,这意味着每秒超过2次查询。
答案 0 :(得分:6)
一般约定是在审计表上没有约束(主要的,外来的等),当然也没有索引 - 以上所有都会减慢插入速度。
批量插入将起作用 - 考虑批量插入以减少数据库所需的连接数量,操作所涉及的时间量(一对多)。此外,如果为此编写事务日志 - 最小化写入它们,因为如果您希望能够在某个时间点恢复数据库,则需要写入IO可能会影响数据库。
我没有看到在一天结束时清除记录的意义 - 两天内发生的流量怎么样? MySQL partitioning would likely be a better idea
答案 1 :(得分:2)
您的问题不是每天的综合浏览量。您必须考虑在高峰时段每秒需要提供多少次综合浏览量。如果网页浏览量是均匀分布的,并且每秒只有2次综合浏览量,那么在普通的非共享服务器中,这不会是一个问题。
但如果没有更多数据(例如您使用的硬件,实际页面负载分布等),则无法确定。
答案 2 :(得分:2)
一些评论:
答案 3 :(得分:0)
确保您的表格具有适当的选择索引。数据库管理系统可以承受更多的压力。
答案 4 :(得分:-1)
我认为你应该:
答案 5 :(得分:-2)
您可能希望确保您的mysql集群已经过优化,并且可能存在压力,只需确保它可以为此类命中做好准备。