BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / www-technology / #13364同步于 2011/5/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖

MySQL最大连接数的问题

wangjianzhou
2011/5/14镜像同步24 回复
以前做网站,(有不少是托管),为了防止托管服务器限制MYSQL连接数,而且数据库的打开会比较慢,都是将数据连接类写成单例模式,这样的话当并发数高,数据库访问就会慢。 现在做一个访问量会大点的网站,所以想程序控制MYSQL的连接数,既能保证数据访问效率,又保证极端情况下连接数过多数据库崩溃,(要是托管的话,也能保证连接限制数)。现在想问一下在常见的普通服务器情况下(双核2Ghz,4G内存),MYSQL的连接数最大值一般为多少能满足这个条件。 给出代码,需要的同学可以参考下。这里最大连接100个 <?php class ConnecToDB { private static $instance=array(); //防止外部创建新的数据库连接类 private function _constuct(){} static public function Connect() { //连接类不够100,创建新类 if(count(self::$instance)<100) { $newDb=new self(); self::$instance[]=$newDb; return $newDb::ConDB(); } else { //随机数保证数据库连接均衡 $i=rand(0,99); $new_obj=self::$instance[$i]; return $new_obj::ConDB(); } } static private function ConDB() { try { $connec=mysql_connect("127.0.0.1","数据库账户","数据库密码"); mysql_select_db("数据库名");//选择数据库 } catch(Exception $e) { $errors[]=$e->getMessage(); foreach($errors as $error) { echo"<div class='errorclass'>$error</div>"; } } return $connec; } } ?>
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
zzcc机器人#1 · 2011/5/14
PHP版连接池? 不是说PHP所有东西的生存期只到脚本返回吗? 那这个对象怎么维持啊? ================================== 没研究过。。只是拿来用用,请教。。
wangjianzhou机器人#2 · 2011/5/14
【 在 zzcc 的大作中提到: 】 : PHP版连接池? : 不是说PHP所有东西的生存期只到脚本返回吗? : 那这个对象怎么维持啊? : ................... 比如第一个人的页面脚本还没结束(这里数据库的关闭连接时利用脚本结束关闭),第二个人请求页面,要是用数据库连接用单例模式的话,这两个人用的就是一个数据库连接。 我的这个代码只是改进单例模式,假如前100个人的页面脚本都还未结束,第101个人请求页面,他的数据库连接对象就是在这100个中随机取一个。
wangjianzhou机器人#3 · 2011/5/14
B/S程序,用户都是请求的同一个程序,当第一个人申请的变量、对象在内存中还没被释放,可以给其他请求的人用。
zzcc机器人#4 · 2011/5/14
那,这样内存回收依靠什么? 前一个脚本执行时申请的内存被后一个脚本使用了。。。 那前一个脚本执行结束,怎么知道要释放什么? 【 在 wangjianzhou 的大作中提到: 】 : B/S程序,用户都是请求的同一个程序,当第一个人申请的变量、对象在内存中还没被释放,可以给其他请求的人用。 : --
wangjianzhou机器人#5 · 2011/5/14
你可以看看垃圾回收机制(GC),PHP和C#等语言有这种功能,当变量、对象等变成垃圾时,会被自动回收,内存会被释放。不同语言有自己的垃圾判断标准,一般是线程结束后,这个线程创建的对象没有再被指向时,这些对象被判断为垃圾。在c#中,内存不够用的话还会根据自己的机制去判断堆上是否有垃圾。
xw2423机器人#6 · 2011/5/14
试下这个? <?php class Foo{ private static $in = array(); static public function go(){ self::$in[] = 1; if(count(self::$in) > 1) exit(); echo count(self::$in); sleep(100); } } Foo::go(); ?> 然后开多个终端运行一下 【 在 wangjianzhou (缺钱) 的大作中提到: 】 : 以前做网站,(有不少是托管),为了防止托管服务器限制MYSQL连接数,而且数据库的打开会比较慢,都是将数据连接类写成单例模式,这样的话当并发数高,数据库访问就会慢。 : 现在做一个访问量会大点的网站,所以想程序控制MYSQL的连接数,既能保证数据访问效率,又保证极端情况下连接数过多数据库崩溃,(要是托管的话,也能保证连接限制数)。现在想问一下在常见的普通服务器情况下(双核2Ghz,4G内存),MYSQL的连接数最大值一般为多少能满足� : 给出代码,需要的同学可以参考下。这里最大连接100个 : ...................
zzcc机器人#7 · 2011/5/14
一般也就是引用计数呗 我原来还以为每个脚本都是独立的运行时,这么说php还有一片公共的区域啊 【 在 wangjianzhou 的大作中提到: 】 : 你可以看看垃圾回收机制(GC),PHP和C#等语言有这种功能,当变量、对象等变成垃圾时,会被自动回收,内存会被释放。不同语言有自己的垃圾判断标准,一般是线程结束后,这个线程创建的对象没有再被指向时,这些对象被判断为垃圾。在c#中,内存不够用的话还会根据自己的机制去判断堆上是否有垃圾。 : -- 得加上private function _constuct(){}这个吧? 【 在 xw2423 的大作中提到: 】 : 试下这个? : <?php : class Foo{ : ...................
xw2423机器人#8 · 2011/5/14
加了也一样吧 【 在 zzcc (Binux <足兆叉虫>) 的大作中提到: 】 : 一般也就是引用计数呗 : 我原来还以为每个脚本都是独立的运行时,这么说php还有一片公共的区域啊 : 得加上private function _constuct(){}这个吧? : ...................
wangjianzhou机器人#9 · 2011/5/14
【 在 xw2423 的大作中提到: 】 : 试下这个? : <?php : class Foo{ : ................... 我是想得到的哪个连接数,有没有如此的测试工具,测出MYSQL的连接数最大保持在多少,能保证每个连接的数据读取不十分缓慢。