如何在node-mysql连接池中正确处理连接持久性事物

时间:2013-08-08 02:10:39

标签: mysql node.js connection-pooling node-mysql

如果我使用node-mysql的连接池功能,这不会在我的应用程序中造成问题,因为在connection.end()之后连接会重新使用吗?这就是我担心的原因:当您在SQL中定义变量或启动事务时,变量或事务是持久的,直到连接关闭。由于连接从未实际关闭,而是重新使用,因此变量和事务可以渗透到另一个不期望变量或期望事务存在的例程中;它希望有一个新的联系。

变量可能会成为一个大问题;例程永远不能安全地假设变量未定义,因为与磨损的连接。

如果一个例程在调用end()之前无法回滚或提交事务,则事务可能会造成更大的问题。如果使用此连接的下一个例程不处理事务,那么所有查询都将附加到事务并暂停,永远不会被执行。我在编写应用程序时可能会小心,这样的错误永远不会发生,但是会发生错误,如果确实发生了,那么调试将非常困难(我不知道哪个例程处理错误连接,坏错误)。

因此,在考虑使用池时,这些是我的一些顾虑。当然,我不是唯一一个想到这些问题的人,所以请详细说明如何正确处理混合连接,如果你是这样的话。 :)

非常感谢。

1 个答案:

答案 0 :(得分:0)

所有交易都将在单一连接的上下文中发生。结束或终止连接后,您将无法再对该事务进行操作。一般模式是打开,查询,关闭,除非你有一个长时间运行的事务,否则你不会遇到任何查询或变量渗入其他连接的问题。

如果是长时间运行的事务,则必须管理该连接对象以确保它存在,并且仅由在该事务中运行的代码使用。