gpt4 book ai didi

multithreading - 为什么数据库连接池比单个连接更好?

转载 作者:行者123 更新时间:2023-12-04 06:50:20 25 4
gpt4 key购买 nike

我目前正在编写一个多线程应用程序,该应用程序需要访问数据库才能为请求提供服务。我看到很多人说使用许多持久数据库连接的池是这种类型的应用程序的方法,但我正在努力思考为什么会出现这种情况。

请记住,我正在 Erlang 中设计此应用程序,因此我将大量使用线程/进程/ worker 。

所以让我们比较两种情况:

  • 您有一个拥有单个数据库连接的线程。您的所有客户端处理线程都与此线程通信以进行数据库查询。
  • 您有一个线程池,每个线程都有自己的数据库连接。当客户端处理线程想要访问数据库时,它会从池中获取这些线程之一,并使用它来查询数据库。

  • 在第一种情况下,我看到很多人说这很糟糕,因为让一个线程处理所有与数据库相关的查询反过来会导致瓶颈。但我的困惑如下:该单线程中的瓶颈实际上不是数据库本身吗?如果线程所做的只是通过其连接句柄查询数据库,那么等待数据库响应请求是否是延迟的主要来源?在这个问题上抛出更多的连接线程将如何解决它?

    最佳答案

    该数据库可能具有完善的多线程能力。使用连接池允许:

  • 利用数据库的多线程/负载平衡能力
  • 避免反复建立和拆除连接的开销

  • 当数据库为多个连接提供服务时,它可以自己决定如何确定请求的优先级。想象一下这个场景:
  • 用户 A 从表 A 中请求一组具有 100,000 行的记录
  • 用户 B 从表 B 中请求一组 50 行的记录
  • 用户 C 更新表 A

  • 如果使用多个连接,DB 可以利用 (1) 和 (2) 可以同时发生的事实,用户 B 获取他的 50 条记录,而不必等待用户 A 获取他的全部 100,000 条记录。只有用户 C 必须等待用户 A 完成。

    此外,建立和拆除 TCP 连接是一项相对昂贵的任务。使用池允许一个用户在不断开 TCP 连接的情况下释放资源,因此下一个用户不必等待新连接。但是,您的单线程方法不会从连接池的这一方面受益。

    关于multithreading - 为什么数据库连接池比单个连接更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20712417/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com