Насколько я знаю, MongoDB не поддерживает транзакции, и нет планов для реализации такой поддержки. Что является причиной этого?Почему у MongoDB нет транзакций?
ответ
Отсутствие транзакции - это компромисс, позволяющий MongoDB быть масштабируемым.
Целью транзакции является обеспечение целостности всей базы данных при одновременном выполнении нескольких операций. Но в отличие от большинства реляционных баз данных, MongoDB не предназначен для работы на одном хосте. Он предназначен для установки в виде кластера из нескольких осколков, где каждый осколок представляет собой набор реплик нескольких серверов (возможно, в разных географических точках).
Сделка может потенциально затронуть множество хостов базы данных. Это означает, что транзакция должна быть синхронизирована между всеми этими хостами. Это будет означать довольно много накладных расходов и будет очень сильно ухудшаться при увеличении размера базы данных путем добавления большего количества серверов.
MongoDB FAQ объясняет это следующим образом:
MongoDB не имеет поддержки традиционной блокировки или сложные операции с откатом. MongoDB стремится быть легким, быстрым и предсказуемым в своей производительности. Это похоже на модель автомикширования MySQL MyISAM. Поддерживая транзакционную поддержку чрезвычайно просто, MongoDB может обеспечить большую производительность, особенно для секционированных или реплицированных систем с несколькими процессами сервера базы данных.
- 1. У MySQL нет поддержки транзакций?
- 2. Почему у клиентов нет?
- 3. Поддержка транзакций в MongoDB
- 4. Почему у меня нет xlrd?
- 5. Почему у boost нет make_scoped()?
- 6. Почему у GLKView нет контекста?
- 7. Почему у Rust нет союзов?
- 8. Почему у ActionScript нет «generics»?
- 9. Почему у Symfony2 нет моделей?
- 10. Почему у fixnum нет eigenclass?
- 11. Почему у React.js нет stateTypes?
- 12. Почему у меня нет свитка?
- 13. Почему у Scala нет указателя?
- 14. Почему у UDP нет флагов?
- 15. Почему у Ruby нет оператора! ==?
- 16. Почему у datetime.time нет astimezone?
- 17. У меня нет gradle.build, почему?
- 18. Почему у SLComposeViewController нет делегата?
- 19. Почему у Википедии нет расширений?
- 20. Почему у меня нет изображений?
- 21. Почему у DecisionTreeClassifier нет prob_classify?
- 22. Почему у Него нет докшринга?
- 23. Почему у bool нет деструктора?
- 24. Почему у структур нет деструктора?
- 25. Почему у узла нет getElementByTagName()?
- 26. Почему у словаря нет AddRange?
- 27. READ_UNCOMMITTED vs Нет транзакций?
- 28. CouchDB/Couchbase/MongoDB эмуляция транзакций?
- 29. OAUTH2 менеджер транзакций grails mongodb
- 30. У Mongoose нет метода `connect`
Не планируется? Кроме того, MongoDB, как правило, предназначен для некоммерческих вещей – Sammaye
@Sammaye - уверен, что транзакционный материал хорош, но транзакции чрезвычайно полезны время от времени. – Rogach
Если это может быть полезно, они, как правило, не нужны, и я бы предпочел использовать MongoDb как есть, чем подвергнуть влиянию производительности поддержки распределенных транзакций нескольких документов в развернутом развертывании. – WiredPrairie