繁体   English   中英

处理mysql数据库连接

[英]Handling mysql db connection

我正在使用node.js和mysql作为后端的高性能实时应用程序。

为了提高性能,我在mysql bd底下进行了单独的node.js进程更新。 更新请求被排队以保证顺序执行(必须)。

我正在考虑在此过程中保持永久打开的数据库连接,以免浪费时间在每个请求上打开它。

其他DB请求(更新或读取)是直接从Web服务器node-js实例提供的,可能是并行提供的。 这些数据库连接当然是在每个请求中创建/释放的。

您看到这种方法的一些弊端吗?

更新:

重要的附加信息。 我之所以选择此独立流程解决方案,基本上是因为以下原因...

在每次更新之前必须执行的逻辑相对复杂,并且取决于数据库中的数据结构。 每次更新之前,都需要几个其他查询。 这个独立的过程具有完整的内存数据结构,并且可以非常快速地执行这些检查,而无需数据库访问(性能提升)。

您的方法的另一个缺点。

MySQL因超时而关闭长时间打开的连接而臭名昭著。

查询期间失去与MySQL服务器的连接

@duffymo是正确的:从池​​中使用短期连接比长期打开连接更有可能保持数百小时的工作时间。

node.js + mysql连接池

我想知道:您说顺序执行是必须的。 大型DBMS(包括大型服务器上的MySQL)非常有能力处理来自多个连接的并发查询,而不会破坏数据。 如果您可以准确地确定更新顺序的强制性要求,则系统可能会更强大。 如果您可以在SQL本身或可能在某些事务中实现该排序,则与坚持只由一个进程进行更新相比,您将拥有一个更具抗故障能力的系统。 像您提到的那种单用途进程在系统测试中不容易调试:它们因各种原因在数百小时后失败而臭名昭著。 当它们的生产失败时,每个人都在争先恐后地恢复它们,因此没有人有时间对它们进行故障排除。

我看到缺点。

交易是最大的交易。 如果UPDATE失败会怎样? 您是否回滚并重试? 将消息放回队列?

我认为更好的方法是在尽可能小的范围内打开,使用和关闭连接。 创建并维护一个连接池,以分摊许多事务的创建成本。

我建议您查看vert.x而不是node.js。 这是用于JVM的node.js。 它使用非阻塞I / O和环形缓冲区事件总线来保证顺序,快速的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM