我在以下案例中寻找最佳做法,并说明为什么每种方式都更好。
我有一个DB,大约有10~20个客户端应用程序连接到一个主DB服务器。
在极少数情况下,每分钟可以有大约200个来自一个客户端到数据库的呼叫。
应用程序是多线程的,每个应用程序大约有20个线程。
这里最佳做法是每个应用程序只保留一个与数据库的连接,并按应用程序重复使用。或者按需要打开新连接并快速关闭它们。
我们正在使用oracle和sql-server。
答案 0 :(得分:3)
.NET oracle提供程序具有内置的连接池功能。每当您需要数据库连接时,请创建一个新的连接,然后立即释放它。连接池将有效地重用连接。
释放连接的最佳方式是通过using
构造,即使发生异常,也会确保连接处置。
using(OracleConnection connection = ConnectionFactory.Create())
{
connection.DoStuff();
} //connection.Dispose() called here.
答案 1 :(得分:1)
最佳做法是尽快处理连接。技术上连接不会被关闭,只是返回到池中,并将被其他线程重用。
SQL Server Connection Pooling (ADO.NET)
来自MSDN:
我们强烈建议您永远 你什么时候关闭连接 完成后使用它 连接将返回到 池。你可以使用 关闭或处理方法 连接对象,或通过打开全部
using
语句中的连接。
答案 2 :(得分:0)
最终是关于你需要限制连接的地方(如果有的话)。 在纯Web应用程序中,您不能冒几千人同时点击POST的风险。另一方面,内部业务应用程序可能只有六个用户。
您的数据库可以应对20个客户端,每分钟拨打200个电话吗?单独的线程是否会对数据库进行并行调用?
我倾向于每个客户都有自己的连接池。
是否有一些客户比其他客户更重要?如果是这样,那么您可能希望一个客户端具有20个连接而其他客户端具有10个连接。
任何体面的数据库设置都应该能够处理几百个连接,如果它们都尝试一次ping,就不会摔倒。