2017-04-28 14:06:12 2458次浏览 4条回答 0 悬赏 100 金钱

今天在网上看到一位同行的文章(http://blog.csdn.net/starrykey/article/details/52049639
原话如下:
数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。数据库软件系统中使用数据库连接池,主要是节省打开或者关闭数据库连接所引起的效率损耗,这种效率上的损耗还是非常昂贵的,因为何用单例模式来维护,就可以大大降低这种损耗。

这里有个疑问,就是比如一个网站,有A,B,C三人在使用中,竟然在用这个网站那么系统都连接着数据库,请问这3个人连接的数据库对象是同一个对象还是不同对象?
还有就是在多并发情况下插入数据的时候,经常要获取最后一次插入的id,这个时候会不会出现id错乱情况(因为多并发,可能获取到其他数据id)?

  • 回答于 2017-04-28 14:25 举报

    不会的吧 单例是面向对象的架构说法 对于数据库插入来说总有个先后的 就是同时的话应该也有队列关系的

    4 条回复
    回复于 2017-04-28 14:35 回复

    你的意思是说 第二个问题不会发生并发问题??

    回复于 2017-04-28 21:21 回复

    程序到数据库应该也是单通道的吧

    回复于 2017-04-29 17:53 回复

    这两个问题不是一个层面的。用户请求 -> PHP进程 -> 启动子进程 -> 实例化对象 -> 执行业务 -> 提供反馈 -> 注销子进程。

    回复于 2017-04-29 17:55 回复

    实例化只是在子进程中的一个行为,它无法超脱出子进程,而每个用户的同一个请求,都会启动一个子进程。

  • 回答于 2017-04-28 15:12 举报

    我有些看法,不知道是否正确
    1.单例模式是指程序运行过程中,只能生成一个对象,在web程序里面,也就是一个请求,只产生一个对象(也许多次用到这个对象,但是每次调用的都是同一个对象),但是a,b,c三个人是三次请求,故请求的不是同一个对象;
    2.数据库写的操作是会上写锁的,插入数据获取到id是你刚才插入的数据的id,而不是真正意义上最后一个

    2 条回复
    回复于 2017-04-28 15:23 回复

    那他的'数据库连接池的设计一般也是采用单例模式'这句话 是有问题的吗

    回复于 2017-04-28 15:36 回复

    访问mysql服务是基于tcp协议的,应该是一个连接对象会有一个对象,两个连接会有两个对象

  • 回答于 2017-05-02 12:05 举报

    YII2使用的是非持久型连接 也就是说3个人 是3个连接

  • 回答于 2017-05-15 17:07 举报

    你这个问题得这么跟你说,一台服务器apache
    A用户访问服务器,他会产生一个 apache进程。
    B用户访问,也会产生一个进程,这是两个进程。

    而你只要理解这个单例,只争对当前进程就行了。
    你现在只要这么理解就成

您需要登录后才可以回答。登录 | 立即注册
xyf90314
副总裁

xyf90314

注册时间:2015-03-04
最后登录:2023-03-13
在线时长:95小时23分
  • 粉丝21
  • 金钱5257
  • 威望40
  • 积分6607

热门问题