Транзакции MongoDB?

Игра с MongoDB и NoRM в .NET.

Вещь, которая меня смутила - транзакций нет (не могу просто сказать MongoConnection.Begin/EndTransaction или что-то в этом роде).

Я хочу использовать шаблон работы и изменения отката в случае, если что-то не получается.

Есть ли еще чистый способ обогащения моего репозитория ITransaction?

Ответ 1

MongoDB не поддерживает сложные транзакции с несколькими документами. Если это то, что вам абсолютно необходимо, это, вероятно, не очень подходит для вас.

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

Ответ 2

Это верно, что MongoDB не поддерживает транзакции из коробки, но вы можете реализовать оптимистичные транзакции самостоятельно. Они отлично подходят для работы. Я написал пример java и некоторое объяснение на GitHub, чтобы вы могли легко повторить на С#.

Ответ 3

Некоторые примечания к записи.

В то время как MongoDB не поддерживает транзакции, он поддерживает атомарность в одном документе:

MongoDB поддерживает атомные операции внутри одного документа. Учитывая возможности, предоставляемые вложенными документами, эта функция обеспечивает поддержку большого количества случаев использования.

Кроме того, интересна запись в руководстве о Isolate Sequence of Operations. Например:.

однако вы можете изолировать одну операцию записи, которая влияет на несколько документов с помощью оператора изоляции.

Ответ 4

Вместо этого вы можете использовать MongoDb TokuMX.

http://www.tokutek.com/products/tokumx-for-mongodb/

TokuMXTM - это высокопроизводительное распределение MongoDB с открытым исходным кодом, которое значительно улучшило производительность и операционную эффективность по сравнению с базовым MongoDB. TokuMX является заменой для MongoDB и предлагает 20-процентное улучшение производительности, сокращение на 90% размера базы данных и поддержку транзакций ACID с MVCC.