问题描述
我在以下情况下寻求最佳实践,并给出每种方法都更好的原因。
我有一个数据库,其中约有10〜20个客户端应用程序连接到一台主数据库服务器。
在非常罕见的情况下,每分钟从一个客户端到数据库大约有200个呼叫。
该应用程序是多线程的,每个应用程序大约20个线程。
这里的最佳实践是,每个应用程序仅与数据库保持一个连接,并在每个应用程序中重新使用它。或根据需要的呼叫打开新的连接并快速关闭它们。
我们正在使用oracle和sql-server。
解决方法
.NET oracle提供程序具有内置的连接池功能。每当您需要数据库连接时,创建一个新的数据库即可完成工作并立即释放它。连接池将负责有效地重用连接。
释放连接的最佳方法是通过“ 0”构造,即使发生异常,该构造也将确保释放连接。
using(OracleConnection connection = ConnectionFactory.Create())
{
connection.DoStuff();
} //connection.Dispose() called here.
, 最佳做法是尽快处理连接。从技术上讲,连接不会关闭,只会返回到池中,并且将被其他线程重用。
SQL Server连接池(ADO.NET)
从MSDN引用:
我们强烈建议您始终
当您关闭连接
完成使用它,以便
连接将返回到
池。您可以使用
Close或Dispose方法的
连接对象,或通过打开所有
using
语句中的连接。
, 最终是关于需要限制连接的位置(如果有的话)。
在纯Web应用程序中,您无法承担数千人同时单击POST的风险。另一方面,内部业务应用程序可能只有六个用户。
您的数据库可以应付20个每分钟进行200次呼叫的客户吗?单独的线程会对数据库进行并行调用吗?
我倾向于每个客户端都有自己的连接池。
有一些比其他人更重要的客户吗?如果是这样,那么您可能希望一个客户端具有20个连接,而另一个客户端具有10个连接。
任何体面的数据库设置都应该能够应对数百个连接,并且如果它们都试图一次ping通,则不会掉线。