Mysql 我应该在Web服务上使用持久连接吗?

Mysql 我应该在Web服务上使用持久连接吗?,mysql,asp.net,web-services,scalability,persistent-connection,Mysql,Asp.net,Web Services,Scalability,Persistent Connection,我有一个在asp net mvc4中编码的Web服务,它在云服务器中运行。 此云服务器有一个IIS 8和一个mysql服务器。此服务器专用于此应用程序 我对这台服务器的请求越来越多。 每个请求都需要连接到数据库(70%的查询是简单的“选择”,25%是与2或3个表的联接,5%是插入) 服务器访问数据库并给出一个简单的xml作为答案,其中包含获取的数据(xml大约为0.2kb到2kb) Web服务始终在服务器中运行 对于每个请求,我的Web服务器都会打开与数据库的连接(存储在同一台机器中),操作、关

我有一个在asp net mvc4中编码的Web服务,它在云服务器中运行。 此云服务器有一个IIS 8和一个mysql服务器。此服务器专用于此应用程序

我对这台服务器的请求越来越多。 每个请求都需要连接到数据库(70%的查询是简单的“选择”,25%是与2或3个表的联接,5%是插入)

服务器访问数据库并给出一个简单的xml作为答案,其中包含获取的数据(xml大约为0.2kb到2kb)

Web服务始终在服务器中运行

对于每个请求,我的Web服务器都会打开与数据库的连接(存储在同一台机器中),操作、关闭连接,然后用xml响应

现在每分钟只发生几次。 我的连接器类是单例的

在这种情况下,是否应该使此连接保持不变? 这是否有助于提高我的应用程序的可伸缩性? 关于如何使其更具可扩展性,有什么建议吗?

几点:

  • 记住这一点。如果这不是目前的性能瓶颈,我不会在这方面花费太多时间

  • 单例在多线程应用程序中非常糟糕。它们代表了可伸缩性的对立面。在高流量应用程序中,您将看到比赛条件以及其他问题。访问静态对象或方法可能涉及上下文切换/修改,这会严重降低性能。我见过应用程序通过简单地去掉单例和其他静态对象并用非单例对象替换它们而获得10倍的加速(“多例?”:/)

  • ,这大大减少了连接到数据库的开销。在应用程序中重新实现该功能(这是通过尝试在应用程序层而不是数据层保持连接打开来实现的)不太可能提高应用程序的性能

  • 天生支持持久连接,所以如果您真的需要这个功能,您可能需要考虑在WCF中实现Web服务,而不是考虑REST或SOAP(ASMX)服务。然而,我觉得WCF是一种相当繁重的web服务实现方法,并且(在我看来)会导致不必要的复杂性


你好。谢谢你的回复。我对此有一些问题。首先,对webservice的每个请求都是一个新线程?如果我有三个并发请求,系统会创建三个新线程吗?第二,池是自动化的吗?第三,我使用带有连接器的MySQL dll(MySqlConnection:DbConnection,iclonable)。这个mysql连接器在内部使用池?