是否可以使用node.js和noSQL db进行事务处理?

T9b*_*T9b 5 transactions nosql node.js

我不是在谈论真钱交易

我正在研究的项目是一个游戏,玩家在游戏之间相互交易。从根本上讲,这是一个交易过程,玩家A给玩家B 10块银币,以换取30头母牛,您就明白了。

但是由于它是交互式的,并且一次有很多玩家,在一个类似聊天室的环境中,所有人都是随机交易的,所以我想知道是否可以用这种方法来做这样的事情,node.js但是我看到了问题。

我来自数据库背景,在这里处理事务以及事务的性质rollbackcommit维护数据库的健康状态是必不可少的。但是,如果我们node.js再加上mongoDB(或与此有关的任何其他noSQL DB)进行交谈,那肯定是完全不同的心态,但是我只是看不到它应该如何处理交易,因为只有两个参与方可以诉诸诉求。某种形式的锁定,但这肯定不是问题node所在。

我还没有发现任何东西,但是这并不奇怪,因为node.js它太新了。

更新我知道交易的机制-尤其是银行风格的交易,但这不是一回事。我可能没有说清楚,但是问题是玩家B正在向买家社区出售东西。

这意味着尽管玩家A在客户端发起了购买指令,但玩家CD或E大约在同一时间也可能点击以购买同一头母牛。

现在,在正常的事务中,期望至少获得记录级别表锁定的第一个人至少阻止其他各方在该时间点继续进行。

但是,使用节点的性质,尤其是它的速度,并发处理以及用于显示实时更新数据库的性质,使我很容易想到最慢的人(我们在说毫秒)获胜。

例如,玩家A与玩家C同时发起购买。玩家A交易完成并且将零钱支付给玩家B,并将母牛分配给数据库中的玩家A。一毫秒后,Cow被分配给玩家C。

我希望这可以更好地解释这个问题。

fre*_*ish 4

这与 Node.JS 无关。Node.JS 仅连接到数据库,事务由数据库本身完成(除非您想在 Node.JS 中手动实现事务,这可能是一项有点困难的任务 - 但这对于用任何语言编写的任何 Web 服务器都是一样的)。

您可以轻松地使用(例如)MySQL 和支持事务的 Node.JS。所以你问的问题是:我可以使用 MongoDB 进行交易吗?答案是:不,又是。

不可以,因为 MongoDB 不支持开箱即用的事务。

是的,因为您可以使用一些技巧来模拟交易。例如,请参阅本文