作者sunz5010 (FoFo)
看板PHP
标题Re: [请益]MySQL Connection 何时建立比较妥
时间Thu Dec 15 13:31:31 2011
【转贴mervynW的回应】
※ 引述《sunz5010 (FoFo)》之铭言:
: 标题: [请益]MySQL Connection 何时建立比较妥
: 时间: Thu Dec 15 11:44:00 2011
: 作法A: 在建构子的地方先建立一个Connecntion
: 之後用到哪个function 就直接使用这个Connecntion
有没有做 Singleton ?? 那2个 Class 会不会有2个连线??
: 作法B: 呼叫个别function 的时候、在建立Connecntion即可
在 function 内 query 还没处理完之前, 有没有可能有多过 function
再去建立连线??
: 推 mervynW:拨电话, 跟hold住电话 那个耗资源? 12/15 11:46
: → sunz5010:好问题!所以我想知道、拨电话到mysql会很耗资源吗? 12/15 11:50
: 推 mrbigmouth:建立connection花的时间远远大於做一个query喔 12/15 11:56
: → mrbigmouth:我的做法是不用恒久连接,每个网页从开始到书出完毕只建 12/15 11:59
: → mrbigmouth:一个connection...其间所有的query都是共用此连接 12/15 11:59
Singleton
: → sunz5010:不过您这个作法、是不是有一个问题,如果我调阅成绩资料 12/15 12:06
: → sunz5010:接着我可能要对成绩做运算,但是这时候其实connection还 12/15 12:07
: → sunz5010:在,但这期间其实他都占据了一个connection的位置,这样 12/15 12:07
: → sunz5010:也不妥不是吗?虽然你说你load一个页面只占一个connectio 12/15 12:08
: → sunz5010:但是等於说1000个人同时load你的页面、这期间就已经占据 12/15 12:08
: → sunz5010:1000连线、而必须要等待他们都处理完,才会释放 12/15 12:09
: → sunz5010:这也是我在担心的事情呢 12/15 12:10
这时候问题就要回到你身上了,你的程式有多少时间是不需要处理 sql 的?
以一般来说... 很少, 做 web 到後来会发现瓶颈多是在 sql 处理上.
(前端呈现问题不看)
所以来说 以 class 建构时建立连线就没有所谓不好的地方, 不过
这个 class 有没有可能有呼叫里面 function 但不需要 sql 的时候??
所以建议建构时可以让你有选择要不要建立连线.
如果有接触 DB High Availability 的问题有可能用看到 connection pool
这东西... 用途是现跟DB建立好连线.
举例来说就像是银行柜台前得号码牌
所有人(php connect to db), 都要跟号码机(pool)领号码牌.
排到号的人就去跟行员(agent), 说明业务需求 s (sql operators),
行员再去用电脑完成(sql operators to db ), 最後把结果回报.
你可以用上面的模式去模拟你的动作... 看那种最有效率.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.252.43.147
1F:→ sunz5010:如果我单一页面一个Class只有一个物件、是不是就没有 12/15 13:40
2F:→ sunz5010:Singleton的问题?要做Singleton是单一php页面出现多次 12/15 13:41
3F:→ sunz5010:同一个class的时候才发生效用对吧? 12/15 13:42
4F:→ sunz5010:跨不同PHP页面,singleton也会起效用? 12/15 13:43
5F:推 mervynW:1. 看你new几次, 2.不同class也有用, 3.不会,不同thread 12/15 13:47
6F:→ sunz5010:我後来想到怎麽用Singleton比较好的方法了,因为我处理 12/15 14:15
7F:→ sunz5010:Connection会交给另外一个class、跟student不同 12/15 14:16
8F:→ sunz5010:原本每用一个student的function就会透过另外一个class建 12/15 14:16
9F:→ sunz5010:立一个Connection,後来我用了Singleton之後,就把处理 12/15 14:17
10F:→ sunz5010:Connection的class加上Singleton,之後每次student需要 12/15 14:17
11F:→ sunz5010:建立Connection时,就不用重新建立一次,而也不需要写在 12/15 14:18
12F:→ sunz5010:建构子里面了,似乎这样比较好? 12/15 14:18