Jag undrar var detta meme kommer ifrån. Först, ingenting garanterar verkligen att allt skrivs till den faktiska hårddisken på grund av alla cachinglager, och även traditionella RDBMS försöker inte skriva till filer hela tiden, annars skulle de inte vara så snabba, men detaljerna varierar kraftigt (se för exempel adaptiv spolning i InnoDB ).
Du bör bara bry dig om det första lagret som i huvudsak är frågan när databasen försöker skriva till disk. Nu finns det första cachinglagret:Istället för att skriva in i de faktiska tabellerna/samlingarna, använder många DB:er (inklusive MongoDB) journaling:Skriv till en fil som endast kan läggas till som regelbundet kommer att slås samman till de faktiska datafilerna. Allt går ner och det finns i journalen, du är bra.
Nu är frågan om man vill skriva till journalen och hur man gör. I MongoDB kan du styra detta med skrivproblem
, det vill säga du kan låta din ansökningskod vänta tills MongoDB har skrivit till journalen för en specifik skrivning (eller för alla skrivningar). I MongoDB tar väntan på journalbekräftelsen högst 10 ms med standardkonfiguration om journalen och datafilerna finns på olika blockenheter, 33 ms om de finns på samma blockenhet. journalCommitInternval
kan även ändras vid behov.
Jag samlade några detaljer om MongoDB:s journalföring i ett annat svar .
Som en sidoanteckning har hållbarhet egentligen inte så mycket att göra med transaktioner. Transaktioner ger isolering och konsekvens, t.ex. du kan ändra flera saker på en gång och läsarna kommer garanterat att få antingen det nya eller det gamla, men inte något mittemellantillstånd. Med andra ord kan en transaktionssäker databas vara en databas i minnet som inte alls skriver till disken.