Jeg spekulerer på, hvor dette meme kommer fra. For det første intet garanterer virkelig, at alt bliver skrevet til den faktiske HDD på grund af alle cachinglagene, og selv traditionelle RDBMS forsøger ikke at skrive til filer hele tiden, ellers ville de ikke være så hurtige, men detaljerne varierer meget (se for eksempel adaptiv skylning i InnoDB ).
Du bør kun bekymre dig om det første lag, som i bund og grund er spørgsmålet, når databasen forsøger at skrive til disk. Nu er der det første caching-lag:I stedet for at skrive ind i de faktiske tabeller/samlinger, bruger mange DB'er (inklusive MongoDB) journaling:Skriv til en fil, der kun kan tilføjes, som jævnligt vil blive flettet tilbage til de faktiske datafiler. I alt går ned, og det er i journalen, du har det fint.
Nu er spørgsmålet, om du vil skrive til journalen, og hvordan du gør det. I MongoDB kan du styre dette ved at bruge skriveproblemet
, dvs. du kan få din ansøgningskode til at vente, indtil MongoDB har skrevet til journalen for en bestemt skrivning (eller for alle skrivninger). I MongoDB tager det højst 10 ms at vente på journalforpligtelsen med standardkonfiguration, hvis journalen og datafilerne er på forskellige blokenheder, 33 ms, hvis de er på den samme blokenhed. journalCommitInternval
kan også ændres efter behov.
Jeg har samlet nogle detaljer om MongoDBs journalføring i et andet svar .
Som en sidebemærkning har holdbarhed ikke rigtig meget med transaktioner at gøre. Transaktioner giver isolation og sammenhæng, f.eks. du kan ændre flere ting på én gang, og læserne vil garanteret få enten den nye eller den gamle, men ikke en mellemtilstand. Med andre ord kan en transaktionssikker database være en database i hukommelsen, som slet ikke skriver til disken.