【发布时间】:2014-12-12 21:09:06
【问题描述】:
好的,首先我想告诉你,我对标题中提到的所有这些技术都是新手。
我想制作一个新应用。将其视为实时交易引擎(例如股票)。
所以,有两件事真正重要:
- 速度/性能:每个人都必须实时查看交易
- 安全性:可以同时进行相同的交易,但只能成功进行一次交易
我想过这样的方法:
如果用户想以 100 美元的价格购买 10 份股票 X,他会下订单,我用 Redis(速度)存储该订单,然后通过 socket.io 将其推送给所有客户。好吧,一旦另一个用户想以 100 美元的价格出售 15 个和平,脚本应该检查是否有未结买单。如果是这样,它会将其保存为 MongoDB 中的成功交易(持久性)并关闭 10 个和平的买入订单。
在这个例子中,剩下 5 个和平。该脚本将显示如下计算:15(以 100 美元卖出)减去 10(以 100 美元买入)等于剩下 5。每次有人想交易某样东西时,都会进行这种计算,因为我不知道还有多少股票可以用于交易。
编辑:或者我可以从 Redis 中的 15 个和平中减去 10 个和平,这样我就不需要每次都计算。但如果出现问题,我将不知道原始数据是什么。这是个问题。
现在的问题是:
- 你会这样吗?也许有更好的想法?
- 如果两个用户同时下完全相同的订单会发生什么?它会作为不同的成功事务在 MongoDB 中存储两次吗?当然,您可以对 Redis 和 MongoDB 进行审计并进行比较。但这将是一个糟糕的解决方案。
希望你明白我想问什么。提前致谢!
【问题讨论】:
-
你应该把它作为交易
-
您的意思是像开始事务一样,将其写入 mongo 并在此事务中更改 redis 中的数据?交易真的是连续的吗?
标签: node.js mongodb redis socket.io