我有一个大型下载站点,我有一个代码可以更新每个下载,以跟踪每个文件下载的人数和总人数查看文件的数量。
但是,代码工作正常,但是当我有很多流量时,代码会减慢站点速度,允许mysql服务器使用大量资源。这段代码是否可以优化?
我很感激有人为我做这件事,无论是通过内部加入等等。谢谢
<?php
#Gathers the client info
$agent = $_SERVER['HTTP_USER_AGENT'];
$brows = explode(" ",$agent);
$ubr = "$brows[0]";
$exptime = time() + 200;
$var = time();
$uip = user_ip();
$del = mysql_query("DELETE FROM log_hits WHERE exptime < '".$var."'");
$hits = mysql_fetch_array(mysql_query("SELECT * FROM user_downloads WHERE id='".$file_id."'"));
#Process unique download count
$u_check = DB::FetchArray(DB::Query("SELECT COUNT(*) FROM log_hits where browser='".$ubr."' and uip='".$uip."' and file_id='".$file_id."'"));
if($file_check[0]=="0")
{
$res3 = DB::Query("INSERT INTO log_hits SET browser='".$ubr."', uip='".$uip."', exptime='".$exptime."', file_id='".$file_id."'");
$unique = $hits[day_unique] + 1;
}else
{
$unique = $hits[day_unique];
}
#update regular hits to the file,
$week = $hits[weekly] + 1;
$hour = $hits[this_hour] + 1;
$todayx = $hits[today_hits] + 1;
$total = $hits[total] + 1;
$month = $hits[month] + 1;
$res3 = DB::Query("UPDATE `user_downloads` SET `day_unique`='{$unique}', `weekly`='{$week}', `this_hour`='{$hour}', `month`='{$month}', `total`='{$total}' , `today_hits`='{$todayx}' WHERE `id`='".$file_id."'") or die(mysql_error());
?>
答案 0 :(得分:2)
您只有5个查询来更新或多或少的简单计数器。在我的观点中,这是非常重要的。
我不知道您的并发用户数量,但我建议采用以下方法:
log_hits
表类似的下载记录。这会将您对每次下载的查询减少为一次。另一方面,统计信息cronjob只使用一个(虽然更昂贵)查询来每次执行大量(更便宜)查询的工作。总的来说,这应该有助于缩短页面的响应时间。