2012-03-27 109 views
1

我一直有在甲骨文形式的背景和正在走向JAVA领域的程序员走近。他问我一个问题,我没有很好的答案。而不是回答这个问题;我总是那样做,或者我就是这样教的。我想我会做一些研究。的Java数据库连接

问题:Java的多线程能力;为什么不为每个用户设置一个到数据库的JDBC连接,每个用户都在自己的线程上?而不是设置连接池并应用用户可以访问池的安全性?

+0

在这种情况下,“用户”是什么意思?一位Oracle用户?应用程序用户? – Jon 2012-03-27 15:14:31

+0

@Jon在这种情况下,“用户”将是应用程序用户 – Miller 2012-03-27 15:18:56

+2

每个应用程序用户有一个线程?因此,500个并发用户将等于JVM中的500个专用线程,每个用户有一个线程,其中许多将在用户什么都没做的时候闲置......您是否可以明白为什么线程池现在更可取?对于任何不平凡的应用程序来说,这种方法不会扩展。 – Jon 2012-03-27 15:31:50

回答

3

连接池扩展性更好。如果每个用户都有专用连接,则50个用户需要50个连接。有了游泳池,你可以用10-20个连接来处理50个用户(取决于用例)。现在看看一个更大的团队,并考虑处理500,5000或50000个用户,您将看到每个用户模型的1个连接不会扩展。

随着连接池(和一个线程池)中,每个请求将仍然由一个线程和一个数据库连接处理,但他们会从池中,而不是每个用户的专用一作出。

1

因为保持大量线程的开销是效率不高。当有更多的用户比你的应用服务器或数据库可以维护时会发生什么?当数据库表上存在很多争用时会发生什么?

通过使用连接池,你不必让您从从池中重新使用数据库连接一个大的性能提升再次从零开始“连接”到数据库。

Apache's DBCP事情是,如果你不使用应用程序服务器开始的好地方。