Mongodb是否缺乏交易成为交易破坏者?
我一直在做一些研究,但已经达到了我认为MongoDB / Mongoose(在Node.js上)不适合工作的地步。 这是场景…
两个文件:帐户(金钱)信息和库存信息
- 检查用户的帐户是否有足够的钱
- 如果是,请检查并扣除库存
- 从帐户信息扣除资金
看来我真的需要一个交易系统来防止其他事件在步骤之间改变数据。
我是正确的,还是可以在MongoDB / Mongoose中处理? 如果没有,是否有一个NoSQL的数据库,我应该检查出来,最好与Node.JS的支持?
实现事务安全性通常比较棘手,不仅仅需要数据库事务,例如,如果您需要以可靠的方式与外部进行通信,或者事务运行时间长达数分钟,数小时甚至数天。 但是,这导致很大。
无论如何,在数据库方面,你可以使用两阶段提交在MongoDB中进行交易,但这并不是微不足道的。
有很多支持事务处理的NoSQL数据库,例如redis ,cassandra(使用Paxos协议 )和foundationdb 。
然而,这对我来说似乎是随机的,因为NoSQL数据库的想法是使用一个适合您的特定问题的想法。 如果你只是需要事务的任何东西,一个SQL数据库可能会做这个工作,对吧?
您可以随时在您的应用程序中实现自己的locking机制,以在进行帐户和库存检查和更新时locking应用程序的其他部分。 结合findAndModify() http://docs.mongodb.org/manual/reference/command/findAndModify/#dbcmd.findAndModify可能已经足够满足您的事务需求,同时也保持了NoSQL解决scheme的灵活性。
对于分布式锁,我会看看术士https://www.npmjs.org/package/node-redis-warlock我没有使用它自己,但它是基于node.js和build立在Redis的顶部,虽然实现你的自己通过Redis开始并不难。