u010294107
u010294107
采纳率0%
2014-11-26 02:52 阅读 3.6k

数据库连接单例和连接池效率区别在哪?

数据库连接问题。new一个数据库的连接对象是耗时耗资源的,因此不可能对每个请求都做一遍连接创建和关闭的操作,网上给的方法一般采用连接池。我的疑问就是,我如果采用单例模式,
这样的话,如果是多个线程请求数据库操作,那么直接调用静态getInstance方法(对此方法加锁),取得同一个数据库连接对象进行数据库操作,是不是可行的。我的理解是Connection在第一次实例化时,已经确定了它要连接时那个数据库,以后的操作也不会改变这些属性,因此不存在线程安全问题,而针对数据库本身的操作,数据应该也会提供一套同步机制,避免“脏数据”。这样的话,单例模式和池化相比,采用哪种方式更好?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

6条回答 默认 最新

  • dollyn 霜之哀伤 2014-11-26 05:47

    如果你是小型应用,保证不会有多线程同时使用这一条连接,那没问题;
    多线程用同一条链接肯定是会出问题的,这个你可以自己写代码测试。

    连接池的目的是为了减少反复的创建和关闭连接,同时又在一定程度上满足多线程可以分别用多条连接。

    点赞 1 评论 复制链接分享
  • csdn1457570681 csdn1457570681 2014-11-26 03:06

    建议思考一下servlet采用的单实例多线程机制,单例模式与连接池似乎并不矛盾

    点赞 评论 复制链接分享
  • ys8616270 insight1989 2014-11-26 03:06

    数据库应该也会提供一套同步机智(why ? ) 。。事务如何保证?????????? ?

    点赞 评论 复制链接分享
  • xuzuning xuzuning 2014-11-26 03:13

    这是两个不同的概念
    数据库连接单例是指在你项目运行期间,始终只有一个数据库连接。即这个链接在程序中是复用的
    而连接池维持了到数据库服务器的多个物理连接,每当有新的数据库连接请求时,优先使用已存在的空闲的物理连接

    显然前者是针对一个项目内部的
    而后者是针对多个项目的(当然也适用项目内的多个独立连接)

    点赞 评论 复制链接分享
  • zhoumeng1107 周小黑 2014-11-26 04:51

    其实在你频繁使用连接单例时,程序会自动为你建立连接痴,效率的区别在于你对sql的操作频率!

    点赞 评论 复制链接分享
  • arjick Arjick 2014-12-03 05:29

    减少连接和销毁时间的消耗

    点赞 评论 复制链接分享

相关推荐