Mongodb缺乏交易是否违约?

时间:2014-06-02 15:53:04

标签: node.js mongodb mongoose nosql

我一直在做一些研究,但我已经达到了我认为MongoDB / Mongoose(在Node.js上)不适合这项工作的工具。这是场景......

两个文件:账户(货币)信息和库存信息

  1. 检查用户的帐户是否有足够的钱
  2. 如果是,请检查并扣除库存
  3. 从帐户信息中扣除资金
  4. 似乎我真的需要一个事务系统来防止其他事件在两个步骤之间改变数据。

    我是否正确,或者仍可以在MongoDB / Mongoose中处理?如果没有,是否有我应该检查的NoSQL数据库,最好是支持Node.JS?

2 个答案:

答案 0 :(得分:3)

实现事务安全通常很棘手,并且需要的不仅仅是数据库上的事务,例如如果您需要以可靠的方式与外部各方沟通,或者交易持续数分钟,数小时甚至数天。但这导致了很多。

无论如何,在数据库端你可以使用two-phase commits在MongoDB中进行交易,但这并不是一件容易的事。

有大量具有交易支持的NoSQL数据库,例如redis,cassandra(使用Paxos protocol)和foundationdb

但是,这对我来说似乎是随机的,因为NoSQL数据库的想法是使用适合您特定问题的数据库。如果你只是需要什么'对于事务,SQL数据库可以完成这项工作,对吗?

答案 1 :(得分:0)

您可以随时在应用程序中实施自己的锁定机制,以便在进行帐户和库存检查和更新时锁定应用程序的其他部分。结合findAndModify()http://docs.mongodb.org/manual/reference/command/findAndModify/#dbcmd.findAndModify可能足以满足您的交易需求,同时还能保持NoSQL解决方案的灵活性。

对于分布式锁定,请查看术士https://www.npmjs.org/package/node-redis-warlock我自己没有使用它,但它的node.js基于并构建在Redis之上,尽管实现了自己的通过Redis并不难开始。