【发布时间】:2013-12-20 21:45:22
【问题描述】:
我目前正在编写一个需要访问数据库才能处理请求的多线程应用程序。我看到很多人说使用包含许多持久数据库连接的池是这种类型应用程序的最佳选择,但我试图弄清楚为什么会出现这种情况。
请记住,我是在 Erlang 中设计这个应用程序的,所以我会大量使用线程/进程/工作者。
那么我们来比较两种情况:
您有一个拥有单个数据库连接的线程。您的所有客户端处理线程都与该线程通信以进行数据库查询。
您有一个线程池,每个线程都有自己的数据库连接。当客户端处理线程想要访问数据库时,它会从池中获取这些线程之一,并使用它来查询数据库。
在第一种情况下,我看到很多人说这很糟糕,因为让一个线程处理所有与数据库相关的查询反过来会导致瓶颈。但我的困惑如下:那个单线程的瓶颈实际上不是数据库本身吗?如果线程所做的只是通过其连接句柄查询数据库,那么等待数据库响应请求不是延迟的主要来源吗?在这个问题上抛出更多的连接线程将如何解决它?
【问题讨论】:
标签: multithreading erlang database-connection