我正在构建一个将使用SQL Server进行数据存储的ASP.NET Web应用程序。我继承了现有的结构,我无法对它进行很多修改。使用此应用程序的人员是付费使用该应用程序的个别公司。每家公司都有大约5或10人将使用该应用程序。大约有1000家公司。系统当前的结构方式,每个公司在SQL Server实例中都有自己独特的数据库。每个数据库的结构都是一样的。我不认为这是一个很好的数据库设计,但我无能为力。还有其他应用程序可以访问这个数据库,重写所有这些应用程序的数据库接口将是一项艰巨的任务。
所以我的问题是如何为新的Web应用程序设计架构。本月有些时候网站会获得大量流量。我的感觉是网站在这些时候表现不佳,因为我猜测当我们有500名来自不同公司的人同时访问网站时,他们每个人都有自己独特的数据库连接,因为他们正在访问不同的SQL Server数据库连接字符串。 SQL Server不会使用任何连接池。我的印象是这很糟糕。
如果他们的客户数量增加一倍会怎样? SQL Server可以处理多少个唯一的数据库连接?这种情况我应该告诉客户,如果他们想要保持可扩展性,他们必须重新设计它吗?
谢谢, 科里
答案 0 :(得分:2)
您不必为每个数据库创建单独的连接
我有一个在同一台服务器上使用多个DB的应用。我在每个查询前加上“USE dbName;”
我甚至在同一个电话中对两个独立的数据库运行查询。
至于调用存储过程,这是一个稍微不同的过程。既然你做不到
Use myDB; spBlahBLah
相反,您必须明确更改连接对象中的数据库。在.Net中它看起来像这样:
myConnection.ChangeDatabase("otherDBName");
然后调用您的存储过程。
答案 1 :(得分:0)
希望您有一个用于常见项目的数据库。在此,我希望您的Clients
表格包含IsEnabled
,Logo
,PersonToCallWhenTheyDontPayBills
等。为Database
添加一列(即目录)在它,Server
。启动时,Web应用程序将指向公共数据库,并为每个客户端构建数据库连接列表。使用表中的Server
和Database
列以编程方式构建数据库连接字符串。
<强>更新强>
在与@Neil讨论后,我想指出我的方法假定单例数据库连接。如果你不这样做,那么按照我的建议是愚蠢的。
答案 2 :(得分:0)
缩放是一个复杂的问题。但是,为什么你不缩放网络方面呢?然后,连接池仅限于Web应用程序。
编辑: 我在这里谈论一般情况。我知道汇集发生在很多层面,而不仅仅是IDbConnection(http://stackoverflow.com/questions/3526617/are-ado-net-2-0-connection-pools-pre-application-domain-or-per-处理)。我想知道提问者是否考虑过在我们的应用程序级别进行扩展。