好的,首先我想告诉你,我对标题中提到的所有这些技术都是新手。
我想制作一个新应用。将其视为实时交易引擎(例如股票)。
所以,有两件事非常重要:
- 速度/性能:每个人都必须实时查看交易
- 安全性:可以同时进行相同的交易,但只有一个可以成功
我想到了这样的方法:
如果用户想以每张 100 美元的价格购买 10 份股票 X,他会下订单,我将其存储在 Redis(速度)中,并使用 socket.io 将其推送给所有客户。那么,一旦另一个用户想要以 100 美元的价格出售 15 个和平,脚本就应该检查是否有未结的买单。如果是,它会将其保存为 MongoDB 中的成功交易(持久性)并关闭 10 个和平的买单。
在此示例中,还剩下 5 个和平。该脚本将通过如下计算显示:15(以 100 美元卖出)减去 10(以 100 美元买入)等于 5 剩余。每次有人想要交易时,都会进行这种计算,因为我不知道还有多少股票可以交易。
编辑:或者我可以从 Redis 中的 15 个和平中减去 10 个和平,这样我就不需要每次都计算了。但是如果出了什么问题,我就不知道原始数据是什么了。这是个问题。
现在的问题是:
- 你会这样做吗?也许有更好的想法?
- 如果两个用户同时发出完全相同的订单会怎样?会不会发生,它作为不同的成功事务在 MongoDB 中存储了两次?当然,您可以对 Redis 和 MongoDB 进行审计并进行比较。但那将是一个糟糕的解决方案。
希望您明白我想问的问题。提前致谢!
最佳答案
首先,如果您对正在使用的堆栈一无所知,那么告诉我需要高性能(高可用性、良好的安全性等)并不是一个好主意。对于您正在使用的所有工具都是全新的,如果它能正常工作,您应该很高兴。
关于你的问题:首先看看其他人是如何做类似的事情的。 Here is an open source bitcoin trading engine which uses node.js这使它成为一个很好的学习示例(它很复杂,所以请深吸一口气)。如果你想使用mongo你需要知道它不支持事务,所以你需要看看如何在那里自己实现它们。 These two explaining it 中的示例非常好.
关于node.js - 实时 : Node. js、MongoDB 和 Redis?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26422380/