场景描述:
有多个用户,每个用户,每20秒就访问xx.php,提交3个参数:a,b,c。a和b都是类似“234234.234323”的数字。c即是id,类似:“231”之类的。由于用户达到上千。而每个用户又是每20秒就要提交一次。所以,服务器受不了。经常资源超限,请诸位集思广议,讨论。非常感谢。
以下是xx.php的源码。<?php
$aaa=$_POST["aaa"];
$bbb=$_POST["bbb"];
$ccc=$_POST["ccc"];
$con = mysql_connect("localhost","userc","pwdpwd");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
echo '连接失败了';
  }echo '成功连接了';
mysql_select_db("abc", $con);
 function sid($str) {
   preg_match_all('/[0-9.-]+/',$str,$result); 
   foreach($result[0] as $value)
    {
     $new_str.=$value;
    }
   return $new_str;
}
 
$aaa=sid($aaa);
$bbb=sid($bbb);
$ccc=sid($ccc);
mysql_query("INSERT INTO webtab (aaa,bbb,xxid) 
VALUES ($aaa, $bbb,$ccc)");mysql_close($con);?>
php优化mysql服务器

解决方案 »

  1.   

    如何将用户提交的数据先存在一个文本文件里,再每隔1分钟,将文件里的数据统一一次写进mysql。
    这样会直到优化的作用吗?效果有多明显?我要如何才能看到这个优化的对比效果?有相关的工具吗?
      

  2.   

    可以用消息队列异步把数据插入到数据库。很简单的,你搜索下资料即可。大概逻辑是你的xx.php把数据写入消息队列。有另外一个程序监控消息队列,然后按照数据库能承受的压力把数据写入数据库。这个架构的前提是你不要求数据实时写入。可以接受几十秒或几分钟的延时。
      

  3.   

    sid用floatval代替是不是更好呢
    可以考虑用php的共享内存 http://cn2.php.net/manual/zh/ref.shmop.php
    在服务器上开一个php的进程,开辟一块共享内存,sleep一段时间后,将数据批量提交到mysql。
    服务器收到请求时将数据写入到共享内存中立即退出
    这应该是一个比较简单的方案了
      

  4.   

    但是空间商,说这个php文件占用大量资源,已经给我封掉了帐号,这会儿才恢复。得赶快优化,不然就可能再次被封。
      

  5.   

    您指的是用INSERT DELAYED INTO ?
      

  6.   


    搜索到了一个资料,看起来很复杂的样子,我用的是国外的空间,不是VPS,有些配置,好像没办法处理。
      

  7.   


    用的webhostingpad的空间,不是VPS,而且我是新手,没有找到办法看具体的监测信息。客服那边给出的说法是:tup.php这个文件引起的。我自己也知道我的所有文件中,这个是用户最经常访问的,源码和使用场景在最上面,已经贴出来了。现在我能想到的比较容易的解决办法就是将insert改为“INSERT DELAYED”,将改mysql_query为“mysql_unbuffered_query”即:
    mysql_query("INSERT INTO webtab (aaa,bbb,xxid) 
    VALUES ($aaa, $bbb,$ccc)");
    改为
    mysql_unbuffered_query("INSERT DELAYED INTO wwwgps (Longitude,Latitude,servappid) 
    VALUES ($lo, $la,$aid)");
    请诸位指点一下,这样改对优化有多大作用?有没有更好办法?比如,先将数据写到txt文件里,然后再每隔3分钟或1分钟将这个txt文件的内容一次性insert到数据库。我看其他资料上有写要将txt文件放到mysql的某目录下,但因为不是用的独立的服务器,我这边找不到mysql目录,只有publichtml这样的目录。
      

  8.   


    求指点,求建议啊,一般这种情况,要怎么处理?就算花钱升级,也得知道怎么花,划算啊。就是这个问题,其他的都指标占用很低,因此就上VPS,感觉很浪费啊。
      

  9.   

    对于供应商来说,最贵的不是CPU、硬盘和内存,最贵的是并发数和流量因为他不是ISP,所以带宽也是受限于ISP,机器的端口是相对固定的,要增加连接端口,不是加大硬盘就能做到的,而是要增加服务器反正并发数和流量太大,迟早要被供应商限制,最终你还是要主机托管,独占一台服务器的全部端口才行
      

  10.   

    如果不是电信上传带宽限制,偶早就在家搞网站了,又不是出不起服务器的钱,找IDC不就是为了他那条网线么?
      

  11.   

    VPS也可以? 我用的是webhostingpad,在之前可以退款的期限内,不出问题。现在过了1个月了,就给我封帐号,好可耻啊。美国的空间商也和天朝一样没有节操啊。
      

  12.   

    CPU Usage  10 / 100 %
    Virtual Memory Usage  0 / 1,048,576 KB
    Physical Memory Usage  34,012 / 1,048,576 KB
    Entry Processes  0 / 25
    I/O Usage  1,024 / 1,024 KB/s
    磁盘空间使用情况  32.87 / 10,000 MB
    带宽(本月)  2,698.54 / 100,000 MB===
    从上面的数据,可以看出,实际上最费的资源是IO,其次就是CPU
    带宽使用,其实很小的。求指点一下,IO超限,一般要怎么处理?我这站,基本上就是用户向里面写几十个字的数字。写的频率比较高。其他没什么费资源的了。连图片都是存在其他服务器上的。谢谢
      

  13.   

    将数据放入redis队列,然后定时取队列数据插入数据库?