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

问题描述

我在以下情况下寻求最佳实践,并给出每种方法都更好的原因。 我有一个数据库,其中约有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通,则不会掉线。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...