nodejs是否将单个函数中的单独数据库操作作为原子进行?

时间:2015-07-31 23:42:40

标签: javascript database node.js transactions

我一直在尝试编写一些在节点j上运行的数据库查询,这就出现在我的脑海中。我可以闻到我误解了一些东西,但无法弄清楚它是什么。

如果node是单线程的,那么这意味着所有函数调用都是一个接一个地运行。如果有多个客户端访问同一个节点服务器,那么仍然存在请求首先排队的竞争,但只要逐个处理每个请求,这不会使所有数据库操作都执行在单个请求中原子?

例如,假设我想1)计算与表中某些值匹配的列数; 2)如果数字大于10,则插入新行。(可能有可能这样做)这在一个SQL查询中,但我们假设我单独运行它们。这是一个愚蠢的例子,但我希望你明白这一点。)我使用一个事务来确保匹配的数量列不会意外更改。现在,我正在考虑编写一个在没有事务的情况下运行两个查询的函数。这样可以保证在节点上正常工作吗?

1 个答案:

答案 0 :(得分:1)

我想你想要运行你的第一个电话,一个计数,然后你想在前一个电话的回调中执行插入。

由于js的性质以及nodejs的性质,一旦你等待第一次调用的响应,一旦它返回并放入事件循环(所以,计数消失了,你已经有了结果在等待服务的同时,其他一切都可能发生......甚至可以在其他地方提供另一个插件,为什么不呢(让我说,你正在服务用户请求,所以由于另一个用户的请求而插入,而不是执行计数的人。)

也就是说,第二个用户的插入可以在第一个用户计数之后发送的插入之前提供,这意味着绑定到计数的插入正在处理错误的预期数据集大小。

这只是你可能招致的一个可能案例,但它应该足以解决你的疑虑。