如何优化数据库连接数?

Posted

技术标签:

【中文标题】如何优化数据库连接数?【英文标题】:How to optimize number of database connections? 【发布时间】:2010-10-14 12:34:23 【问题描述】:

我们有一个带有 Tomcat servlet 容器的 Java (Spring) Web 应用程序。 我们有一个类似博客的东西。 但是博客必须使用 Ajax 动态加载其帖子。 客户端的 ajax 脚本每秒检查新帖子。 IE。 Ajax 必须每秒向服务器请求新帖子,这对数据库来说将非常繁重。

但是如果我们同时有数十万个连接呢? 我认为我们必须每秒用 cron 检索所有帖子,然后将其保存在某个地方。但是哪里? 主要思想是卸载数据库。 关于建筑的任何想法? 提前致谢!

【问题讨论】:

您是否已经缓存了数据库请求,例如在内存缓存中? 看看 Casandra:cassandra.apache.org 这可能是你的灵丹妙药。 【参考方案1】:

根据具体情况,还有其他可能更优化的轮询架构:

长轮询

长轮询是 传统的投票技术和 允许模拟信息 从服务器推送到客户端。和 长轮询,客户端请求 来自服务器的信息 类似于普通民意调查的方式。然而, 如果服务器没有任何 可供客户使用的信息, 而不是发送空响应, 服务器持有请求并等待 以获得一些信息。 一旦信息可用 (或在适当的超时后),一个 完整的响应被发送到 客户。然后客户端通常会 立即重新索取资料 从服务器,使服务器 几乎总是有可用的 等待它可以用来的请求 传递数据以响应事件。 在 web/AJAX 上下文中,长轮询是 也称为彗星编程。

Long Polling

该技术的实现示例: Push Server

您还可以使用观察者模式来注册请求,并在更新完成时通知它们。

【讨论】:

是的,就是我找到的那个!非常感谢!【参考方案2】:

每秒钟都有数十万并发用户轮询我们的网站,这会产生大量流量。如果您真的期望这种负载,您将不得不相应地设计您的平台,可能通过集群多个 Web、应用程序和数据库服务器。

请记住,使用数据库连接池,您不需要为每个用户建立数据库连接。

【讨论】:

【参考方案3】:

我对Tomcat不是很熟悉,但是在WebSphere中我们可以设置连接池来准备一定数量的连接。

另外,你主要担心读取还是写入次数相同?

另外,您可能还希望根据区域等“拆分”数据库。这样就不会在整个数据库中产生单一的重负载,但它可以被拆分甚至负载平衡。

还有“NoSQL”数据库可供研究。也许需要考虑一些事情。只是提供帮助的想法。

【讨论】:

以上是关于如何优化数据库连接数?的主要内容,如果未能解决你的问题,请参考以下文章

Mysql优化

mysql优化-mysql最大连接数

2016-11-15mysql优化笔记

Mongodb最大连接数优化

优化返回大量记录的查询,避免数百个连接。这是一个聪明的解决方案吗?

多个客户端访问服务器时如何优化。有客户端,服务端,数据库。