2013-08-04 5 views
3

Насколько я знаю, MongoDB не поддерживает транзакции, и нет планов для реализации такой поддержки. Что является причиной этого?Почему у MongoDB нет транзакций?

+0

Не планируется? Кроме того, MongoDB, как правило, предназначен для некоммерческих вещей – Sammaye

+0

@Sammaye - уверен, что транзакционный материал хорош, но транзакции чрезвычайно полезны время от времени. – Rogach

+0

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

ответ

7

Отсутствие транзакции - это компромисс, позволяющий MongoDB быть масштабируемым.

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

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

MongoDB FAQ объясняет это следующим образом:

MongoDB не имеет поддержки традиционной блокировки или сложные операции с откатом. MongoDB стремится быть легким, быстрым и предсказуемым в своей производительности. Это похоже на модель автомикширования MySQL MyISAM. Поддерживая транзакционную поддержку чрезвычайно просто, MongoDB может обеспечить большую производительность, особенно для секционированных или реплицированных систем с несколькими процессами сервера базы данных.

Смежные вопросы