请教SAE的mysql连接问题

#1 monklong

现在代码好像是每次new 一个spModel的时候都会创建一个SaeMysql实例,如果子spModel里面会调用其他子spModel的逻辑时,会同时打开多个SaeMysql,占用多个连接。但是SAE的mysql连接数非常有限,免费版只有20个并发连接
请问是否可以让所有的spModel都共用一个SaeMysql实例?

2014-07-12 09:46:34

#2 jake

用speedphp的spClass来创建spModel的子实例,因为spClass是单例特性的,所以重复使用不会再进行创建对象,也就不会再建新的链接了。

2014-07-12 09:56:35

#3 monklong

jake 发表于 2014-7-12 09:56
用speedphp的spClass来创建spModel的子实例,因为spClass是单例特性的,所以重复使用不会再进行创建对象, ...
谢谢回复
我在Model里面有几个继承spModel的类,如:dbUser, dbLog, dbScore ...,并不是同一单例然后我再dbScore的某些函数中会用到dbUser和dbLog操作,这样在调用dbScore的相关函数时,由于实例化了dbLog,dbScore,这样就同时打开了几个链接。为了避免多开连接,我只好直接吧dbUser和dbLog的操作写成SQL,在dbScore里面用$this->runSql来执行,很不方便
是我这种写法就完全不对?我主要是想把对应表的操作都封装在行用的dbXX  extends spModel 里面。

2014-07-12 10:26:29

#4 jake

monklong 发表于 2014-7-12 10:26
谢谢回复
我在Model里面有几个继承spModel的类,如:dbUser, dbLog, dbScore ...,并不是同一单例然后我 ...
“由于实例化了dbLog,dbScore,这样就同时打开了几个链接。”

说明一下,不会出现这样的情况的。请参考spModel.php文件的52行,数据库链接驱动实例,是通过spClass来进行实例化的。

也就是说,不管spModel的子类有多少个,实例化多少次,数据库驱动_db的实例只会是同一个,所以只会链接一次。

2014-07-12 15:26:27

#5 monklong

jake 发表于 2014-7-12 15:26
“由于实例化了dbLog,dbScore,这样就同时打开了几个链接。”

说明一下,不会出现这样的情况的。请参考s ...
谢谢回复
之前没完全看懂,我再仔细看看

2014-07-12 17:37:56

#6 monklong

确实是这样,并没有多开连接。看来链接被占满不是这个原因。
谢谢jake耐心答疑

2014-07-12 18:14:36

#7 monklong

SaeMysql()会打开2个连接,一个主库,一个从库,
当其中一个连接数受限导致访问延时的时候,另外一个已打开的连接就一直没有释放。
请问现在的结构,在spModel子类里面怎么调用SaeMysql->closeDb()比较方便呢?
比如我一个spModel子类的函数,前半截是读操作,后半截是写操作,我想在写操作前先主动释放从库连接。需要调用一下SaeMysql()->closeDb()

2014-07-14 22:51:19

#8 jake

monklong 发表于 2014-7-14 22:51
SaeMysql()会打开2个连接,一个主库,一个从库,
当其中一个连接数受限导致访问延时的时候,另外一个已打 ...
或者可以写个简单的函数,里面就这么一句话释放链接,在需要的时候调用一下。

2014-07-15 08:54:12