首页 > 解决方案 > 如何在 NODEJS 中做到这一点?

问题描述

这没有代码,因为它是半夜,醒来一个问题。

我有一个 node.js 网络应用程序,并使用 firebase 验证用户名(电子邮件)和密码,还有一个令牌,它是数据库中的应用内货币。假设 User1 在他的帐户中有 50 个令牌,令牌保存在 fire base 数据库中,用户 2 在他的数据库中有 20 个令牌。

用户 1 决定向用户 2 发送 20 个令牌。

是否可以从数据库中提取金额 50 减去 20 并打印剩余的新值 (20) 令牌并将 20 个令牌添加到用户 2 中,因此他现在总共有 40 个令牌保存在数据库中。

我也有创建一个类并使其成为钱包并将代币存储在钱包中的想法,我大致知道如何做到这一点,但是代币价值存储在哪里?如何建立连接以在用户之间添加/减去令牌?

如果你要这样做?你会怎么做?

附言。我不是要求为我编写代码,我似乎真的无法在我的脑海中找到解决方案,并且它一直困扰着我,以至于我无法入睡。我将尝试从这里获得建议,并继续发布代码片段,看看它的性能如何,并希望将来能对我和其他人有所帮助。

附言。钱包是非加密的,只是在应用货币令牌中

标签: javascriptnode.jsdatabase-connection

解决方案


根据我在处理此类问题时遇到的用例的想法,扣除、转移和信用的解决方案非常简单,因为您可能已经有了一个想法。

但关注的关键点是我们如何处理在紧张时期完成的涉及同一方的故障、并发和重叠交易。这会使简单的交易变得复杂,因为在这种情况下,您处理的方式变得很重要。

对于这样的解决方案,其中每个事务都必须是原子的,并且我们不能承受不完整的事务,我们需要一个无损且高度可重现的基于事务的系统。

因此,我会推荐 CQRS(命令查询责任分离)模式,因为这将有助于执行事务的回滚和重试。此外,它有助于合并和汇总以及每笔交易的验证。

因此,基于事件的系统可以为每个事务引发独立的事件,这些事件将像事务日志一样存储。然后,这些日志将由您的事务处理器获取,该处理器可以是功能、模块或服务。

然后,该服务可以执行代币转移的相关交易,并引发分析、验证和整合事件。

有人说,一张照片值一千字,这是给你的。

在此处输入图像描述

PS-这绝不是一个完整的解决方案,而是实现最终解决方案的一般策略。另外,还有很多其他方法可以完成,但以上是基于我的经验和思维方式


推荐阅读