Årsagen er ydeevne. Uden at skulle skrive til disk ved hver ændring, kan MongoDB håndtere opdateringer hurtigere.
MongoDB fortæller dig, når opdateringer er blevet leveret til serveren, ikke når opdateringerne er blevet skrevet , som du kan læse i dokumentationen om Verifying Propagation af skriver med getLastError :
Dette strider imod ACID , mere specifikt mod D, som står for holdbarhed :
ACID-egenskaber gælder for det meste traditionelle RDBMS-systemer. NoSQL-systemer, som inkluderer MongoDB, opgiver en eller flere af ACID-egenskaberne for at opnå bedre skalerbarhed. I MongoDB's tilfælde er holdbarheden blevet ofret for bedre ydeevne ved håndtering af store mængder opdateringer.
MongoDB og ACID
De fleste ACID-egenskaber er garantier på transaktionsniveau . En transaktion er normalt en gruppe af forespørgsler, der skal behandles som en enkelt enhed. MongoDB har intet begreb om transaktioner, igen af performanceårsager . Derfor gælder de fleste ACID-egenskaber ikke for MongoDB.
A — Atomicitet angiver, at en transaktion enten skal lykkes eller mislykkes. Det er ikke tilladt delvist at lykkes; hvis en del af transaktionen mislykkes, skal hele transaktionen rulles tilbage. MongoDB understøtter atomiske operationer på dokumentniveau, men ikke på 'transaktionsniveau'.
C — Konsistens refererer delvist til atomicitet, men omfatter også referentiel integritet . En relationsdatabase er ansvarlig for at sikre, at alle fremmednøglereferencer er gyldige. MongoDB har intet koncept for fremmednøgler, så denne ACID-egenskab gælder ikke.
I — Isolation anfører, at to samtidige transaktioner ikke må forstyrre hinanden; hvis to transaktioner forsøger at ændre de samme data, skal den anden transaktion vente på, at den første er fuldført. For at opnå dette låser databasen dataene. MongoDB har intet koncept for låsning, så det understøtter ikke isolering for flere operationer. Enkelte operationer er isolerede.
D — Holdbarhed er beskrevet ovenfor. MongoDB understøtter ikke ægte holdbarhed (endnu) med hensyn til ACID-ic-holdbarhed.
Nu tror du måske, at MongoDB er ubrugelig sammenlignet med RDBMS-systemer, fordi den mangler transaktioner og de fleste ACID-garantier. En del af grunden til, at transaktioner eksisterer, er imidlertid, at relationsdatabaser skal behandle visse data som en enkelt enhed , men disse data er blevet normaliseret til flere tabeller .
MongoDB giver dig mulighed for at gemme dine data som en enkelt enhed . Dette fjerner behovet for fremmednøgler og referentiel integritet i de fleste tilfælde. Du behøver heller ikke multi-forespørgselstransaktioner, fordi du ikke behøver flere tabeller for at opdatere en enkelt enhed. De fleste gange skal du kun opdatere et enkelt dokument, og disse operationer er atomare i MongoDB.
Ifølge den første kommentar på denne side
, db.eval()
giver isolering til flere operationer. Men ifølge dokumentationen
du vil normalt undgå brugen af db.eval()
.