如何优化数据库连接数?
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”数据库可供研究。也许需要考虑一些事情。只是提供帮助的想法。
【讨论】:
以上是关于如何优化数据库连接数?的主要内容,如果未能解决你的问题,请参考以下文章