【发布时间】:2013-01-14 15:17:14
【问题描述】:
问题的 1º 部分:
我的应用程序正在从 TCP 套接字接收大量数据,我需要将数据存储在 MySQL 数据库中。现在,我只是在每次我想查询数据库时创建一个新连接,并且在查询后我关闭连接。
我只有一个线程来接收数据并存储在数据库中,但我还有其他线程正在查询数据库(它们也创建新连接),但这些线程速度较慢(查询更复杂)。问题是:
- 当我只有接收和存储数据的线程时,数据的存储速度相对较快(我认为可能更快);
- 当我还有查询速度较慢的线程时,存储变得太慢...
连接是否可能阻塞? (每次我想访问数据库时,我都会创建和关闭连接)。
问题的2º部分:
在解决上述问题的研究中,我看到我应该使用连接池,因为这样可以提高对数据库的访问时间。
所以我找到了 5 种可能性来实现它:
- http://commons.apache.org/dbcp/
- http://www.mchange.com/projects/c3p0/
- http://www.javamex.com/tutorials/synchronization_concurrency_semaphore2.shtml
- http://www.snaq.net/java/DBPool/
- http://www.roseindia.net/tutorial/java/jdbc/jdbcconnectionpooling.html
由于我没有时间测试它们中的每一个,我想知道哪一个(在您看来)可以提供更好的性能和更少的问题需要解决......
(我在网上某处看到dbcp 可以提供更多问题而不是解决问题...)
【问题讨论】:
-
我认为 5 号应该足够了。
-
你知道线程池是你问题的原因吗。即即使是简单的查询也很慢。如果您发现更复杂的查询速度较慢,则您的池不太可能是问题的根源。
-
顺便说一句:我在roseindia.net 上阅读的所有材料都写得非常糟糕。它更有可能令人困惑而不是有帮助。
-
如果你真的“没时间考试”,那你就错了。
标签: java database performance connection pool