【问题标题】:Is there a workaround for pinging a database every few minutes?是否有每隔几分钟 ping 一次数据库的解决方法?
【发布时间】:2021-06-22 02:20:09
【问题描述】:

所以,我有一个 NodeJS MySql 系统,它每 10 分钟 ping 一次数据库(可能将其设置为一分钟)以不丢失连接,但这不是我喜欢编写的代码质量。 所以,现在我问自己,是否有任何方法可以避免这种情况。 我没有关于池是什么或它们做什么的计划。我在其他一些帖子中看到过它们,但没有关注它们,这是唯一的选择吗?
提前致谢。

【问题讨论】:

  • Afaik 池用于管理多个数据库连接。但是您的问题尚不清楚:为什么您首先会失去连接?你的节点代码是什么类型的程序?它是网络服务器吗?
  • 我正在制作一个与我的数据库通信的网络服务器。我失去了连接,因为 MySql 在一段时间后由于不活动而中断了连接。
  • 如果旧连接已关闭,如何创建新连接?
  • 轮询数据库不是解决方案,你应该不明白为什么mysql会断开连接并修复它。这不是 mysql 的预期行为。
  • 在你的标题和描述中你犯了ther ==> therewich ==> which这样的错误

标签: javascript node.js performance node-mysql


【解决方案1】:

是的,您应该了解连接池 - 它们是管理连接(或一组连接以支持并发)的好工具。

连接 - 无论是到数据库还是到任何其他远程系统 - 都是不可靠的。他们可以来来去去,你不能假设一种联系会永远存在。主机有时会重新启动,网络链接可能会断开,或者防火墙可能会选择终止您的 TCP 会话。

当然,您可以实现一个“连接回收器”来维护单个连接,并在它关闭时将其替换为新连接。但是,这将是徒劳的,因为池已经这样做了 - 只有它通常在后台管理超过 1 个实例。无论如何,这是一个很好的学习练习。

池还有另一个优点 - 它可以根据负载进行扩展,根据需要创建和销毁连接。这可以让您在应用程序负载较低时减少对数据库的负载。

作为结束语,如果您使用查询构建器 (knex.js)、对象关系映射器(sequelize、TypeORM)或其他类型的抽象数据库访问的工具,它们通常会在后台使用池,无论如何 - 所以从长远来看,了解这一重要的基础设施层是有益的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-06
    • 2011-06-28
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 2017-04-03
    相关资源
    最近更新 更多