实时:Node.js、MongoDB和Redis?

实时:Node.js、MongoDB和Redis?,node.js,mongodb,redis,socket.io,Node.js,Mongodb,Redis,Socket.io,好的,首先我想告诉你,我对标题中提到的所有技术都是新手 我想做一个新的应用程序。把它想象成一个实时交易引擎(比如股票) 因此,有两件事真正重要: 速度/性能:每个人都必须实时查看交易 安全:相同的交易可以同时进行,但只有一个交易可以成功 我想到了这样一种方法: 如果一个用户想以每只100美元的价格购买10个Peace的股票X,他会下一个订单,我用Redis(speed)存储该订单,然后用socket.io将其推送给所有客户。好的,一旦另一个用户想要以100美元的价格出售15台Peace,脚本应该

好的,首先我想告诉你,我对标题中提到的所有技术都是新手

我想做一个新的应用程序。把它想象成一个实时交易引擎(比如股票)

因此,有两件事真正重要:

  • 速度/性能:每个人都必须实时查看交易
  • 安全:相同的交易可以同时进行,但只有一个交易可以成功
  • 我想到了这样一种方法:

    如果一个用户想以每只100美元的价格购买10个Peace的股票X,他会下一个订单,我用Redis(speed)存储该订单,然后用socket.io将其推送给所有客户。好的,一旦另一个用户想要以100美元的价格出售15台Peace,脚本应该检查是否有公开的购买订单。如果是这样,它会将其保存为MongoDB(持久性)中的成功交易,并关闭10个Peace的购买订单

    在这个例子中,剩下5个和平。脚本将显示这样的计算:15(以100美元卖出)减去10(以100美元买入)等于5。每当有人想交易某个东西时,就会进行这种计算,因为我不知道还有多少股票可以交易

    编辑:或者我可以从Redis中的15个和平中减去10个和平,这样我就不必每次都计算了。但如果出现问题,我不知道原始数据是什么。这是个问题

    现在的问题是:

  • 你会这样做吗?也许有更好的主意
  • 如果两个用户同时发出完全相同的订单,会发生什么情况?它会不会在MongoDB中作为不同的成功事务存储两次?当然,您可以对Redis和MongoDB进行审计并进行比较。但这将是一个可怕的解决方案

  • 希望你明白我的意思。提前谢谢

    首先,如果您对所使用的堆栈一无所知,那么告诉我需要高性能(高可用性、高安全性等)不是一个好主意。对于您正在使用的所有工具,您都是全新的,如果它能够正常工作,您应该感到高兴


    至于你的问题:首先看看其他人是如何做类似的事情的。这使它成为一个很好的学习例子(它很复杂,所以深呼吸)。如果你想使用mongo,你需要知道它不支持事务,所以你需要看看如何自己实现它们。示例非常好。

    您应该将其设置为事务您的意思是像开始事务一样,将其写入mongo,并在该事务中更改redis中的数据?交易是否真正连续?谢谢!开源项目肯定有很大帮助。如果你是新手,这当然是个问题。所以我想在实践中学习,让它一步一步地变得更好。但为了开始,我需要正确的方向。创建它只是为了后来发现它是一种完全错误的方式是愚蠢的。