Mysql 在数据库连接池中重用连接

Mysql 在数据库连接池中重用连接,mysql,mongodb,tcp,connection-pooling,Mysql,Mongodb,Tcp,Connection Pooling,据我了解,数据库连接池通常是这样工作的: 在应用程序初始化期间创建n个连接并将其放入缓存(例如列表) 线程将需要一个连接来对数据库执行一些操作,并在连接完成后返回连接 当缓存中没有可用的连接时,步骤2中的线程将等待连接被推回缓存 我的问题是: 我们可以在从池中获取多个db操作后,通过一个连接执行多个db操作,而不是执行一个db操作,然后将其放回池中吗?它似乎更有效,因为它节省了获取和恢复连接的时间。(在多线程条件下,当add和get来自连接池时,必须有一些锁定成本) 有人能帮忙吗?太棒了 是的,

据我了解,数据库连接池通常是这样工作的:

  • 在应用程序初始化期间创建n个连接并将其放入缓存(例如列表)
  • 线程将需要一个连接来对数据库执行一些操作,并在连接完成后返回连接
  • 当缓存中没有可用的连接时,步骤2中的线程将等待连接被推回缓存
  • 我的问题是:

    我们可以在从池中获取多个db操作后,通过一个连接执行多个db操作,而不是执行一个db操作,然后将其放回池中吗?它似乎更有效,因为它节省了获取和恢复连接的时间。(在多线程条件下,当
    add
    get
    来自连接池时,必须有一些锁定成本)


    有人能帮忙吗?太棒了

    是的,每次从池中获取数据库连接时,它都可以用于多个操作,这种行为对于使用池的数据库应用程序是典型的。例如,在处理对REST服务的请求期间,可能会获取一次连接,并将其重新用于多个操作。此生命周期通常还包括将这些操作作为数据库中的单个事务进行管理。

    1。它是一个TCP连接,套接字是其端点。2.三号。见(2)。与创建新连接的成本相比,“获取和恢复连接”的时间微不足道。这就是为什么连接池首先存在的原因。@user207421我没有说不要使用连接池,我关注的是,一旦我们从连接池中获取了连接,我们可以通过它执行很多db操作,而不是在将其放回之前执行一个db操作,因为它是TCP连接,为什么不能通过一个TCP连接@user207421发送多个请求当您询问连接的并发使用情况和使用连接池的开销时,您是在暗示不使用连接池:如果这不是您真正要问的,还不清楚你问的问题是什么,还没有得到回答。对于单个TCP连接的并发使用,您需要一个并发应用程序协议,并且没有证据表明任何数据库实际支持它,也没有证据表明它在长结果集的情况下如何有效工作。同样,这只是更多的证据表明您正在尝试不使用连接池。我正在讨论更好地使用连接池@用户207421。首先,如果我在多线程条件下使用一个连接,就可以了。但它比在高并发请求下使用连接池要慢。所以问题二是肯定的,对吗?其次,我可以从池中获取连接并保持。然后多个线程通过连接发送db操作(比如我在连接池中有5个连接,有50个请求,每个连接10个请求)。它是否比10次“获取并执行db操作并返回”操作更好?获取它,Thks。另一个问题:如果n个线程想通过一个连接执行n个db操作(例如,10个线程执行10个插入操作),那么必须有一个锁让它们以线性方式执行,对吗?@LiuWenzhe可能会使用无锁算法,但需要某种并发管理。在目前使用的大多数数据库中,数据库可以为许多应用程序自动管理锁定。是的,在数据库端,它有一些锁定算法来确保操作正确完成。但是在客户端,它就像这样的伪代码:``func insert(data){lock()res=socket.send(data)unlock()}```我说得对吗?@LiuWenzhe一个应用程序或DB客户端库可以这样写,但我不希望它是如此普遍。一种更常见、更有用的模式是一次只通过一个线程获取、使用和释放连接。池获取和释放操作可能会有一些锁定,但不是每次通过连接调用都会有锁定;因为一次只有一个线程可以访问它,所以它是无用的。