处理mysql数据库连接

我正在研究一个高性能的实时应用程序,其中node.js和mysql作为后端。

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

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

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

你看到这种方法的一些缺点?

更新:

重要的附加信息。 基于以下原因,我select了这个独立的stream程解决scheme。

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

对你的方法的另一个认识。

MySQL在超时的情况下closures已经打开很长时间的连接是臭名昭着的。

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

@duffymo是正确的:使用来自池中的短暂连接比长时间打开的连接更可能持续工作数百小时。

node.js + mysql连接池

我想知道:你说顺序执行是必须的。 大规模DBMS(包括大型服务器上的MySQL)非常有能力处理来自多个连接的并发查询而不会破坏数据。 如果您可以精确计算更新的顺序,那么您的系统可能会更加健壮。 如果您可以在SQL本身或可能在某些事务中实现这种sorting,那么与坚持只有一个进程执行更新相比,您将拥有更多的防故障系统。 像你所提到的那种单一目的的过程在系统testing中不容易debugging:由于各种原因,它们在数百小时后出现故障而臭名昭着。 当他们生产失败时,每个人都在争先恐后地恢复他们,所以没有人有时间来解决问题。

我看到缺点

交易是最大的一个。 如果更新失败会发生什么? 你回滚,再试一次? 把消息放回队列?

我认为一个更好的方法是在尽可能最窄的范围内打开,使用和closures连接。 创build并维护一个连接池,以缓冲许多事务的创build成本。

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