保持与DB的一个连接或根据需要打开关闭

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了保持与DB的一个连接或根据需要打开关闭相关的知识,希望对你有一定的参考价值。

我在下面的案例中寻找最佳实践,并说明为什么每种方式都更好。

我有一个DB,大约有10~20个客户端应用程序连接到一个主DB服务器。

在极少数情况下,每分钟可以有大约200个从一个客户端到数据库的呼叫。

该应用程序是多线程的,每个应用程序大约20个线程。

这里最好的做法是每个应用程序只保留一个与DB的连接,并按应用程序重用它。或者按需要打开新连接并快速关闭它们。

我们正在使用oracle和sql-server。

答案

.NET oracle提供程序具有内置的连接池功能。每当您需要数据库连接时,请创建一个新的连接,然后立即释放它。连接池将有效地重用连接。

释放连接的最佳方法是通过using构造,即使发生异常,也将确保连接处理。

using(OracleConnection connection = ConnectionFactory.Create())
{
    connection.DoStuff();

} //connection.Dispose() called here.
另一答案

最佳做法是尽快处理连接。技术上连接不会被关闭,只是返回到池中,并将被其他线程重用。

SQL Server Connection Pooling (ADO.NET)

从MSDN引用:

我们强烈建议您在使用完毕后始终关闭连接,以便将连接返回到池中。您可以使用Connection对象的Close或Dispose方法,或打开using语句中的所有连接来执行此操作。

另一答案

最终是关于你需要限制连接的地方(如果有的话)。在纯Web应用程序中,您不能冒几千人同时点击POST的风险。另一方面,内部业务应用程序可能只有六个用户。

您的数据库可以处理20个客户端,每分钟拨打200个电话吗?单独的线程是否会对数据库进行并行调用?

我倾向于每个客户端都有自己的连接池。

是否有一些客户比其他客户更重要?如果是这样,那么您可能希望一个客户端有20个连接而其他客户端有10个连接。

任何体面的数据库设置应该能够处理几百个连接,如果它们都试图立即ping,则不会失败。

以上是关于保持与DB的一个连接或根据需要打开关闭的主要内容,如果未能解决你的问题,请参考以下文章

Apache配置与应用

如何使用 Visual Studio 中的 C# 代码打开和关闭与服务器资源管理器中保存的数据库 (.db) 数据连接的连接?

Golang打开数据库句柄

数据库连接应该始终保持打开状态还是仅在需要时才打开?

数据库连接应该始终保持打开状态还是仅在需要时才打开?

最佳实践:每次传输后保持 TCP/IP 连接打开还是关闭?