2010-10-26 116 views
0

我管理的是一个相当大的流量网站。在每个页面上,我们通过运行以下代码来跟踪访客在线。然后我们有一个cron删除超过X分钟的记录。在线访问大型流量网站登录访问者

if(!isset($_SESSION[users_online_id])) { 
if(!(date('H')=='02' && date("i") >= 37 && date("i") <= 45)) { 
# NEW VISITOR - DOESN'T HAVE A USER_ONLINE_ID 
    $update_query = "INSERT INTO online SET 
    ip_address = '".$visitors_ip_address."', 
    datetime = now(), 
    user_id = ".$visitor_id.", 
    page = '".escape($_SERVER[REQUEST_URI])."', 
    area = '".$this_area."', 
    type = ".$visitor_type; 
    mysql_query($update_query); 

    # SET THEIR SESSION VAR FOR NEXT PAGE CHECKING 
    $_SESSION[users_online_id] = mysql_insert_id(); 
} 
    } 
    else{ 
# USER HAS A SESSION 

# CHECK THAT THE RECORD STILL EXIST 
$check_record = "SELECT COUNT(1) FROM online WHERE id = ".$_SESSION[users_online_id]; 
$check_record = mysql_query($check_record); 

if(mysql_result($check_record,0) > 0){ 
    # IF RECORD STILL EXISIT (WAS NOT DELETED) UPDATE IT 
    $update_query = "UPDATE online SET 
    datetime = now(), 
    user_id = ".$visitor_id.", 
    page = '".escape($_SERVER[REQUEST_URI])."', 
    type = '".$visitor_type."', 
    area = '".$this_area."', 
    ip_address= '".$visitors_ip_address."' 
    WHERE id = '".$_SESSION[users_online_id]."'"; 
    mysql_query($update_query); 
} 
else if(!(date('H')=='02' && date("i") >= 37 && date("i") <= 45)){ 
    # IF RECORD WAS DELETED (TO LONG ON 1 PAGE), INSERT A NEW RECORD 
    $update_query = "INSERT INTO online SET 
    ip_address = '".$visitors_ip_address."', 
    datetime = now(), 
    user_id = ".$visitor_id.", 
    page = '".escape($_SERVER[REQUEST_URI])."', 
    area = '".$this_area."', 
    type = ".$visitor_type; 
    mysql_query($update_query); 
    $_SESSION[users_online_id] = mysql_insert_id(); 
} 
     } 

做一些服务表现的监测,我注意到,与此表进行交互查询开始花费更长的时间来执行。关于如何改进的任何想法?

回答

1

您可以消除SELECT查询并使用UPDATE查询和mysql_affected_rows()函数。

0

小了点,但是......

$ _ SERVER [ 'REQUEST_URI']是7倍高于$ _SERVER更快[REQUEST_URI]

同时确保ID的设定作为主键。

+0

同样$ _SESSION ['users_online_id'] – 2010-10-26 15:14:13