我想在我的 Web 应用程序中实现连接池。请问我该如何实现。
问问题
1433 次
2 回答
2
我会说你有两个问题:
- 你不知道你是否需要连接池
和
- 如果您发现需要它,您不知道如何实现它。
我最初会假设您不需要它,重用连接是一种(可能为时过早的)优化。
但是,如果您发现您确实需要它,那么您如何做将取决于您的应用程序服务器的性质。
- 如果您的应用程序是 Apache 的“进程内”,那么除了每个进程(或线程)一个连接之外,您真的别无选择
- 如果您的应用程序“进程外”,例如通过 mod_jk 连接到 Tomcat,那么您可以在应用程序服务器 (Tomcat) 中执行您喜欢的操作,其中可能包括在适当的情况下跨多个线程使用的池连接。
每次使用新连接的令人信服的原因是:
- 先前请求留下的旧连接状态不会产生不必要的副作用
- 您只在需要时进行连接 - 降低数据库连接的风险
- 可预测的性能 - 您可以衡量请求所花费的时间,包括创建连接
重用连接的唯一令人信服的原因是连接开销时间本身。
一些数据库创建连接的速度相对较慢(Oracle) - 其他数据库要快得多(MySQL)。一些数据库可以调整为在内部保留一个线程池,它们可以重用(MySQL),这使得连接速度更快。
于 2009-08-25T06:36:45.313 回答
0
虽然我没有明确的答案(我也在寻找),但我可以提出以下建议(对于 perl 后端):
- 如果您使用的是 mod_perl2,请查看 Apache::DBI ( http://metacpan.org/pod/Apache::DBI )。它有一些缺点,在页面上列出。
- 如果您使用 perl DBI 连接到您的数据库,那么不要使用 connect() 方法调用,而是使用 connect_cached() 方法调用。
于 2009-10-07T15:26:59.237 回答