Причината е изпълнението. Без да се налага да записвате на диска при всяка промяна, MongoDB може да обработва актуализации по-бързо.
MongoDB ви казва кога актуализациите са доставени към сървъра, а не когато актуализациите са написани , както можете да прочетете в документацията за Проверка на разпространение от записи с getLastError :
Това противоречи на ACID , по-точно срещу D, което означава издръжливост :
Свойствата на ACID се отнасят най-вече за традиционните RDBMS системи. NoSQL системите, които включват MongoDB, се отказват от едно или повече от ACID свойствата, за да постигнат по-добра скалируемост. В случая на MongoDB издръжливостта е пожертвана за по-добра производителност при работа с големи количества актуализации.
MongoDB и ACID
Повечето свойства на ACID са гарантирани на ниво на транзакция . Транзакцията обикновено е група от заявки, които трябва да се третират като една единица. MongoDB няма концепция за транзакции, отново поради причини за производителността . Следователно повечето свойства на ACID не се отнасят за MongoDB.
А — Атомарността заявява, че транзакцията трябва или да успее, или да се провали. Не се допуска частичен успех; ако част от транзакцията е неуспешна, цялата транзакция трябва да бъде върната назад. MongoDB поддържа атомни операции на ниво документ, но не и на ниво „транзакция“.
C — Съгласуваността частично се отнася до атомарността, но също така включва референтна цялост . Релационна база данни е отговорна за гарантирането, че всички препратки към външни ключове са валидни. MongoDB няма концепция за външни ключове, така че това ACID свойство не е приложимо.
Аз — Изолацията гласи, че две едновременни транзакции не могат да си пречат една на друга; ако две транзакции се опитат да променят едни и същи данни, втората транзакция трябва да изчака първата да завърши. За да постигне това, базата данни ще заключи данните. MongoDB няма концепция за заключване, така че не поддържа изолация за множество операции. Единичните операции са изолирани.
D — Трайността е описана по-горе. MongoDB не поддържа истинска издръжливост (все още) по отношение на издръжливостта на ACID-ic.
Сега може да си помислите, че MongoDB е безполезна в сравнение с RDBMS системите, защото липсват транзакции и повечето ACID гаранции. Въпреки това, част от причината за съществуването на транзакции е, че релационните бази данни трябва да третират определени данни като единствен обект , но тези данни са нормализирани в множество таблици .
MongoDB ви позволява да съхранявате данните си като едно цяло . Това премахва необходимостта от външни ключове и референтна цялост в повечето случаи. Също така не се нуждаете от транзакции с множество заявки, защото не се нуждаете от множество таблици, за да актуализирате един обект. В повечето случаи трябва да актуализирате само един документ и тези операции са атомарни в MongoDB.
Според първия коментар на тази страница
, db.eval()
осигурява изолация за множество операции. Въпреки това, според документацията
обикновено искате да избегнете използването на db.eval()
.