【问题标题】:Realtime: Node.js, MongoDB and Redis?实时:Node.js、MongoDB 和 Redis?
【发布时间】:2014-12-12 21:09:06
【问题描述】:

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

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

所以,有两件事真正重要:

  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 进行审计并进行比较。但这将是一个糟糕的解决方案。

希望你明白我想问什么。提前致谢!

【问题讨论】:

  • 你应该把它作为交易
  • 您的意思是像开始事务一样,将其写入 mongo 并在此事务中更改 redis 中的数据?交易真的是连续的吗?

标签: node.js mongodb redis socket.io


【解决方案1】:

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

至于你的问题:首先看看其他人是如何做类似的事情的。 Here is an open source bitcoin trading engine which uses node.js 这使它成为一个很好的学习例子(它很复杂,所以深呼吸)。如果你想使用 mongo 你需要知道它不支持事务,所以你需要看看如何在那里自己实现它们。 These two 的示例在 explaining it 中非常好。

【讨论】:

  • 谢谢!开源项目肯定有很大帮助。当然,如果您是新手,这将是一个问题。所以我想到了边做边学,一步一步让它变得越来越好。但要开始,我需要正确的方向。创建它只是为了以后发现它是一种完全错误的方式是愚蠢的。
猜你喜欢
  • 2013-05-30
  • 1970-01-01
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 2021-11-28
  • 2016-09-29
相关资源
最近更新 更多