Есть ли способ гарантировать транзакцию со стороны пользователя - PullRequest
2 голосов
/ 24 февраля 2011

Поскольку MongoDB не поддерживает транзакции, есть ли способ гарантировать транзакцию?

Ответы [ 4 ]

4 голосов
/ 24 февраля 2011

Что вы подразумеваете под «гарантийной транзакцией»?

В MongoDB есть два одинаковых понятия;

  • Атомные операции
  • Использование безопасного режима / getlasterror ...

http://www.mongodb.org/display/DOCS/Last+Error+Commands

Если вам просто нужно знать, произошла ли ошибка, например, при запуске обновления, вы можете использовать команду getlasterror из документации ...

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

Если вы пишете данные в MongoDB на несколько соединений, то это может иногда важно позвонить getlasterror на одно соединение будет уверен, что данные были зафиксировано в базе данных. За Например, если вы пишете соединение № 1 и хотите, чтобы те, кто пишет Отражаясь в чтениях из соединения № 2, вы можете убедиться в этом, вызвав getlasterror после записи в соединение № 1.

Кроме того, вы можете использовать атомарные операции для случаев, когда вам нужно увеличить значение, например (например, upvote и т. Д.), Подробнее об этом здесь:

http://www.mongodb.org/display/DOCS/Atomic+Operations

В качестве примечания, движок хранения MySQL по умолчанию также не имеет транзакции! :) http://dev.mysql.com/doc/refman/5.1/en/myisam-storage-engine.html

3 голосов
/ 24 февраля 2011

MongoDB поддерживает только атомарные операции.Нет способов реализовать транзакцию в смысле ACID поверх MongoDB.Такая поддержка транзакций должна быть реализована в ядре.Но вы никогда не увидите полную поддержку транзакций из-за теоремы CARP.Вы не можете иметь скорость, долговечность и постоянство одновременно.

2 голосов
/ 06 октября 2012

К сожалению, MongoDB не поддерживает транзакции из коробки, но на самом деле вы можете реализовать оптимистичные транзакции ACID поверх него.Я написал пример и некоторые пояснения на странице GitHub .

2 голосов
/ 24 февраля 2011

Я думаю, что это одна из вещей, которую вы решаете отказаться, когда выбираете решение NoSQL.

Если требуются транзакции, возможно, NoSQL не для вас. Время вернуться к реляционным базам данных ACID.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...