是否可以在MongoDB之上实现多版本并发控制(MVCC)?

时间:2011-05-12 21:46:56

标签: mongodb transactions mvcc nosql

MongoDB对我来说是一个很棒的数据库。但是,有些情况下我确实需要原子多文档事务。例如,在账户之间转移(如金钱或信誉),这需要完全成功或完全失败。

我想知道是否可以通过实现MultiVersion并发控制模式的库与MongoDB进行交互。

表演有多糟糕? 使用混合方法是否可行且有利可图,仅在必要时使用“mongo-mvcc”库,而在仅处理单个文档时使用传统的数据库连接还是会破坏mvcc的内容?

5 个答案:

答案 0 :(得分:7)

最简单的方法是使用锁(两阶段提交),尽管在某些情况下这不是很有效。对于更高的并发性,可以在Mongo的顶部实现某种MVCC。本文提供了一个很好的描述:

http://highlyscalable.wordpress.com/2012/01/07/mvcc-transactions-key-value/

答案 1 :(得分:6)

Money事务可以通过两阶段提交来实现:http://www.mongodb.org/display/DOCS/two-phase+commit

答案 2 :(得分:5)

现在GitHub上有一个关于MongoDB MVCC的实现:

https://github.com/igd-geo/mongomvcc

答案 3 :(得分:2)

MongoDB并非真正用于处理事务。在http://kylebanker.com/blog/2010/04/30/mongodb-and-ecommerce/

上可以很好地讨论如何实现这一点

答案 4 :(得分:0)

当你需要真正的TRANSACTIONS时,你使用RDBMS来支持它们:) NoSQL更快,更具可扩展性,主要是因为它们不支持事务。

如果你需要两者,或许最好让事务层支持事务,NoSQL层用于其他目的?在某些情况下,使用MongoDB和PostgreSQL

创建混合系统应该不难