Можно ли реализовать Multi-Version Concurrency Control (MVCC) поверх MongoDB? - PullRequest
7 голосов
/ 13 мая 2011

MongoDB для меня отличная база данных.Однако есть случаи, когда мне действительно нужны атомарные многодокументные транзакции.Например, чтобы передавать вещи (например, деньги или репутацию) между учетными записями, и это должно либо полностью завершиться, либо полностью провалиться.

Интересно, можно ли было бы взаимодействовать с MongoDB через библиотеку, реализующую шаблон MultiVersion Concurrency Control,

Насколько плохо было бы в отношении выступлений?Было бы возможно и выгодно использовать гибридный подход, используя библиотеку 'mongo-mvcc' только при необходимости и традиционное соединение с БД при работе только с одним документом, или это сломало бы материал mvcc?

Ответы [ 5 ]

7 голосов
/ 07 января 2012

Самый простой способ - использовать блокировки (двухфазное принятие), хотя в некоторых случаях это не очень эффективно. Для более высокого уровня параллелизма на вершине Mongo может быть реализована какая-то MVCC. Эта статья содержит хорошее описание:

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

6 голосов
/ 05 июля 2011

Денежная транзакция может быть осуществлена ​​посредством двухфазной фиксации: http://www.mongodb.org/display/DOCS/two-phase+commit

5 голосов
/ 29 марта 2012

Существует реализация MVCC для MongoDB, доступная сейчас на GitHub:

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

2 голосов
/ 13 мая 2011

MongoDB не предназначен для работы с транзакциями.Существует действительно хорошее обсуждение того, как вы могли бы реализовать это по адресу: http://kylebanker.com/blog/2010/04/30/mongodb-and-ecommerce/

0 голосов
/ 05 июля 2011

Хорошо, когда вам нужны настоящие СДЕЛКИ, вы используете СУБД, предназначенные для их поддержки :). NoSQL быстрее и более масштабируем, в основном потому, что они не поддерживают транзакции.

Если вам нужны оба варианта, возможно, это хорошая идеяиметь транзакционный уровень для поддержки транзакций и уровень NoSQL для других целей?В некоторых случаях не должно быть затруднительно создать гибридную систему, используя, например, MongoDB и PostgreSQL

...