我不是在谈论真钱交易
我正在做的项目是一个玩家互相交换东西的游戏。这基本上是一个交易过程,玩家 A 给玩家 B 10 块钱以换取 30 头奶牛,你明白了。
但由于它是交互式的,而且同时有很多玩家,在一个类似聊天室的环境中,所有交易都是随机的,我想知道是否有可能做这样的事情,node.js
但我发现了问题。
我来自数据库背景,处理事务及其性质rollback
是commit
维护数据库健康状态所必需的。但是,如果我们谈论的是node.js
plus mongoDB
(或任何其他 noSQL DB),那肯定是一种完全不同的心态,但我只是不明白它如何处理交易,因为只有两方应该参与而不诉诸某种形式的锁定,但肯定不是这样node
。
我还没有找到任何东西,但这并不让我感到惊讶,因为node.js
它太新了。
更新我知道交易的机制——特别是银行风格的交易,但这不是一回事。我可能没有说清楚,但问题是玩家 B 正在向买家社区出售东西。
这意味着尽管玩家 A 在客户端发起了购买指令,但也有可能大约在同一时间,玩家 CD 或 E 也点击购买同一头牛。
现在在正常事务中,预计至少第一个获得记录级表锁的人至少会阻止其他方在该时间点继续进行。
然而,节点的使用性质,特别是它的速度、并发处理和用于显示实时更新数据库意味着我可以很容易地想象最慢的人(我们说的是毫秒)获胜。
例如,玩家 A 与玩家 C 在同一时间发起购买。玩家 A 交易完成,Groats 支付给玩家 B,并且在数据库中将奶牛分配给玩家 A。一毫秒后,奶牛被分配给玩家 C。
我希望这能更好地解释这个问题。