返回信息流以前做网站,(有不少是托管),为了防止托管服务器限制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;
}
}
?>
这是一条镜像帖。来源:北邮人论坛 / www-technology / #13364同步于 2011/5/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
WWWTechnology机器人发帖
MySQL最大连接数的问题
wangjianzhou
2011/5/14镜像同步24 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
PHP版连接池?
不是说PHP所有东西的生存期只到脚本返回吗?
那这个对象怎么维持啊?
==================================
没研究过。。只是拿来用用,请教。。
【 在 zzcc 的大作中提到: 】
: PHP版连接池?
: 不是说PHP所有东西的生存期只到脚本返回吗?
: 那这个对象怎么维持啊?
: ...................
比如第一个人的页面脚本还没结束(这里数据库的关闭连接时利用脚本结束关闭),第二个人请求页面,要是用数据库连接用单例模式的话,这两个人用的就是一个数据库连接。
我的这个代码只是改进单例模式,假如前100个人的页面脚本都还未结束,第101个人请求页面,他的数据库连接对象就是在这100个中随机取一个。
那,这样内存回收依靠什么?
前一个脚本执行时申请的内存被后一个脚本使用了。。。
那前一个脚本执行结束,怎么知道要释放什么?
【 在 wangjianzhou 的大作中提到: 】
: B/S程序,用户都是请求的同一个程序,当第一个人申请的变量、对象在内存中还没被释放,可以给其他请求的人用。
: --
你可以看看垃圾回收机制(GC),PHP和C#等语言有这种功能,当变量、对象等变成垃圾时,会被自动回收,内存会被释放。不同语言有自己的垃圾判断标准,一般是线程结束后,这个线程创建的对象没有再被指向时,这些对象被判断为垃圾。在c#中,内存不够用的话还会根据自己的机制去判断堆上是否有垃圾。
试下这个?
<?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个
: ...................
一般也就是引用计数呗
我原来还以为每个脚本都是独立的运行时,这么说php还有一片公共的区域啊
【 在 wangjianzhou 的大作中提到: 】
: 你可以看看垃圾回收机制(GC),PHP和C#等语言有这种功能,当变量、对象等变成垃圾时,会被自动回收,内存会被释放。不同语言有自己的垃圾判断标准,一般是线程结束后,这个线程创建的对象没有再被指向时,这些对象被判断为垃圾。在c#中,内存不够用的话还会根据自己的机制去判断堆上是否有垃圾。
: --
得加上private function _constuct(){}这个吧?
【 在 xw2423 的大作中提到: 】
: 试下这个?
: <?php
: class Foo{
: ...................
加了也一样吧
【 在 zzcc (Binux <足兆叉虫>) 的大作中提到: 】
: 一般也就是引用计数呗
: 我原来还以为每个脚本都是独立的运行时,这么说php还有一片公共的区域啊
: 得加上private function _constuct(){}这个吧?
: ...................
【 在 xw2423 的大作中提到: 】
: 试下这个?
: <?php
: class Foo{
: ...................
我是想得到的哪个连接数,有没有如此的测试工具,测出MYSQL的连接数最大保持在多少,能保证每个连接的数据读取不十分缓慢。