如何在不使用多个数据库连接的情况下进行多个AJAX请求?

3

我正在创建一个网页,其中包含通过 AJAX 请求动态生成的选择元素。

在某些事件发生时,选择元素会向脚本发送请求,该脚本执行数据库连接、查询数据库并响应接收到的数据,然后将其填充到选择元素中。每个选择元素在不同的事件下都会进行独立的请求。

在这种情况下,多个数据库连接是否不可取?有什么方法可以避免它们?我使用的是 PHP 和 MySQL。


只有当连接过多达到了连接限制且请求开始失败时,多个连接才会变得糟糕。 - Marc B
2个回答

2
多个连接不会造成任何损害。根据您的Web服务器和数据库类型,最大连接数可能会有所不同,但默认最大连接数为151,如此处所示。如果超过此数字,则会收到“Too many connections”错误,这意味着所有可用连接都被其他客户端使用。
“允许的连接数由max_connections系统变量控制。默认值为151,以提高MySQL与Apache Web服务器一起使用时的性能。 (以前,默认值为100)。如果需要支持更多连接,则应为此变量设置较大的值。”
如果您建立一个适当的连接来获取并返回数据,则应在几毫秒内完成,因此很小的机会会有151个并发打开的连接都在处理查询。
所以不,这不是问题。

我认为限制每个页面使用的查询数量非常重要,这比使用的联接数量更加重要。 - mtanti
显然,尽可能少地执行查询是更好的选择。因此,与其从同一张表中检索10个字段而执行10个查询,不如将它们全部合并为一个查询。但我想这是显而易见的。如果您在编写适当且优化的查询时运用常识,那么最大连接数永远不会成为您关注的问题。 - Jules

0

如果您每页或每次只发出少量请求,那么这不会太昂贵。如果是非常繁忙的页面或站点,则可以创建连接池并在会话之间共享。

有一件事:根据您的描述,似乎您正在让页面动态生成SQL。这听起来像是注入攻击的食谱。确保在应用AJAX之前对其进行消毒。


我认为限制每个页面使用的查询数量非常重要,这比使用的连接数量更重要。 - mtanti
如果您担心特定页面使用的查询数量,则可以通过限制会话变量来进行节流。由于您并没有详细说明页面将要执行的操作,因此很多内容都是推测性的。 - ethrbunny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接