2010-04-16 3 views
26

Игра с MongoDB и NoRM в .NET.MongoDB сделки?

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

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

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

ответ

28

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

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

+0

я не получил, что 'обновление modifiers' часть. Как именно они могут помочь? (имейте в виду, что я полный новичок на этом) :) –

+1

модификаторы обновления позволяют выполнять определенные сложные операции атомарно с одной операцией - думает, как «увеличить значение этого поля на x» или «добавить новое значение в этот массив ". – mdirolf

+0

@mdirolf Должен ли один рефактор, если он попадает в сценарий, где он зависит от ОПЕРАЦИЙ? – Tushar

17

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

+2

Это действительно хороший пример. Как жаль, что он не реализован таким образом внутри MongoDB, даже в качестве переключаемой абстракции/плагина. – gertas

+1

Удивительная запись, спасибо за это. +10 если смогу. – jcollum

+0

Если вам нужны транзакции в mongodb, вы должны переосмыслить свой дизайн/архитектуру программного обеспечения – dit

1

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

Хотя MongoDB не поддерживает транзакции, он поддерживает atomicity on a single document:

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

Кроме того, может возникнуть интерес к ручной записи о «Isolate Sequence of Operations». Например,

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

0

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

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

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

1

Начиная с версии 4.0 (ожидается в 2018 году) MongoDB будет поддерживать многодоменные транзакции ACID. Благодаря изоляции моментальных снимков транзакции обеспечат глобально согласованное представление данных и обеспечивают выполнение всего или ничего для обеспечения целостности данных. Для получения дополнительной информации и бета-версии см. https://www.mongodb.com/transactions

В этом blog post я также излагаю наше путешествие к транзакциям с несколькими документами ACID, если вас интересует история и наши рассуждения.

1

MongoDB 4.0 добавит поддержку для транзакций с несколькими документами.

https://www.mongodb.com/transactions

+0

Вместо того, чтобы просто предоставить ссылку, введите ключевой текст в свой ответ. В противном случае, если ссылка опустится, мы потеряем ответ! :) – sniperd