node.js - Node.js 和 mongoDB 多并发请求购物车结账功能
问题描述
我仍然无法理解 Node.js 在并发方面是如何与 MongoDB 一起工作的。
例如,我有一个 API,用户将从购物车中结帐。(例如库存中有2双鞋,有3个用户同时购买。预期结果是第3个用户将无法购买。但它怎么知道哪个用户不会得到鞋子? )
当按下结帐按钮时,我可以在 Mongodb 中使用“事务”来确保所有流程(例如向客户收费、更新库存减少 1、为该用户添加项目到运输)只有在所有流程都成功时才会写入。
但是如果同时发生 3 笔交易呢?还是我太偏执了,这种情况在现实生活中不会发生。
如何使用邮递员模拟这个?还是卷曲?
在处理可能被并发修改(例如增量计数器)破坏的复杂数据时,我想实现类似于firebase 提供的功能。
解决方案
我曾经使用 Postman 尝试过类似的事情。我正在为注册到应用程序的用户生成一个 ID,该 ID 会自动递增。因此,基本上第一个用户获得 ID 1,第二个用户获得 ID 2,依此类推。为了生成一个 ID,我从 mongodb 获得了最大的 ID,将其递增 1 并将其分配给下一个用户。现在,如果 2 个用户同时注册会发生什么。我同时使用 Postman 注册了 2 个用户,结果和我预期的一样,他们都得到了相同的 ID。现在,你如何预防它?您可以通过使用锁来做到这一点。您必须对集合使用 MongoDB 锁,因此一次只有一个用户可以访问它。
推荐阅读
- python - Plotly:如何使用 plotly.graph_objects 和 plotly.express 定义图形中的颜色?
- python - 分配标签:所有值都是假的
- xmldiff - https://docs.microsoft.com/en-us/previous-versions/dotnet/articles/aa302294(v=msdn.10) 中的 XmlDiff 和补丁使用场景
- python - Random.choice 仅从一行文件中选择
- javascript - 多次调用渲染器不起作用
- excel - Excel 公式 - 测试日期和乘法索引
- c++ - 如何对等待 malloc 完成所花费的时间进行基准测试?
- c# - Unity3D:在平移和旋转后将子对象置于其原始位置
- typescript - dynogels 总是告诉我 Invalid schema content 即使使用它的 github repo 中的示例
- java - 如何将输入(84 23 75 24)输入到数组中?