Транзакции 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.