node.js - 实时 : Node. js、MongoDB 和 Redis?

标签 node.js mongodb redis socket.io

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

我想制作一个新应用。将其视为实时交易引擎(例如股票)。

所以,有两件事非常重要:

  1. 速度/性能:每个人都必须实时查看交易
  2. 安全性:可以同时进行相同的交易,但只有一个可以成功

我想到了这样的方法:

如果用户想以每张 100 美元的价格购买 10 份股票 X,他会下订单,我将其存储在 Redis(速度)中,并使用 socket.io 将其推送给所有客户。那么,一旦另一个用户想要以 100 美元的价格出售 15 个和平,脚本就应该检查是否有未结的买单。如果是,它会将其保存为 MongoDB 中的成功交易(持久性)并关闭 10 个和平的买单。

在此示例中,还剩下 5 个和平。该脚本将通过如下计算显示:15(以 100 美元卖出)减去 10(以 100 美元买入)等于 5 剩余。每次有人想要交易时,都会进行这种计算,因为我不知道还有多少股票可以交易。

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

现在的问题是:

  1. 你会这样做吗?也许有更好的想法?
  2. 如果两个用户同时发出完全相同的订单会怎样?会不会发生,它作为不同的成功事务在 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/

相关文章:

node.js - 如何在嵌套 for 循环中调用异步函数而不耗尽内存?

javascript - MongoDB 写命令 Node.js

Redis Docker 连接被拒绝

javascript - Node.js 应用程序中的 SequelizeConnectionError

javascript - 如何从状态 url 路由中删除感叹号 Mean full stack

mysql - 如何在带有 Express 框架的 mysql 中使用 AND 运算符

mongodb - 如何连接mongodb和Informix服务器

javascript - MongoDB/Javascript 范围问题

python - 在 nginx 上使用 Django 设置套接字

java - 使用 Jedi 通过 Java 客户端从 Redis 服务器上的列表中删除字符串