Welche Philosophie steckt hinter einem solchen Ansatz?
Effizienz (bessere Nutzung der Datenträgereigenschaften) und Leistung (ermöglicht es der Anwendung, unmittelbar nach einem Schreibvorgang fortzufahren).
Warum werden die Daten nicht sofort geschrieben?
Der Hauptvorteil ist, dass das Betriebssystem zusammenhängende Schreibvorgänge neu anordnen und zusammenführen kann, um die Bandbreitennutzung zu verbessern (weniger Vorgänge und weniger Suchvorgänge). Festplatten erzielen eine bessere Leistung, wenn eine kleine Anzahl großer Vorgänge angefordert wird, während Anwendungen eher eine große Anzahl kleiner Vorgänge benötigen. Eine weitere klare Optimierung ist, dass das Betriebssystem auch alle bis auf den letzten Schreibvorgang entfernen kann, wenn derselbe Block in kurzer Zeit mehrmals geschrieben wurde, oder sogar einige Schreibvorgänge gemeinsam entfernen kann, wenn die betroffene Datei in der Zwischenzeit entfernt wurde.
Diese asynchronen Schreibvorgänge werden ausgeführt, nachdem der write
Systemaufruf zurückgegeben wurde. Dies ist der zweite und am meisten sichtbare Vorteil für den Benutzer. Asynchrone Schreibvorgänge beschleunigen die Anwendungen, da sie ihre Arbeit fortsetzen können, ohne darauf zu warten, dass sich die Daten tatsächlich auf der Festplatte befinden. Die gleiche Art des Pufferns / Zwischenspeicherns wird auch für Leseoperationen implementiert, bei denen kürzlich oder häufig gelesene Blöcke im Speicher verbleiben, anstatt erneut von der Platte gelesen zu werden.
Besteht keine Gefahr, dass das Schreiben aufgrund eines E / A-Fehlers fehlschlägt?
Nicht unbedingt. Das hängt vom verwendeten Dateisystem und der vorhandenen Redundanz ab. Ein E / A-Fehler ist möglicherweise harmlos, wenn die Daten an anderer Stelle gespeichert werden können. Moderne Dateisysteme wie ZFS heilen selbst fehlerhafte Festplattenblöcke. Beachten Sie auch, dass E / A-Fehler moderne Betriebssysteme nicht zum Absturz bringen. Wenn sie während des Datenzugriffs auftreten, werden sie einfach an die betroffene Anwendung gemeldet. Wenn sie während des strukturellen Metadatenzugriffs auftreten und das Dateisystem gefährden, wird es möglicherweise schreibgeschützt erneut bereitgestellt oder für den Zugriff gesperrt.
Bei einem Betriebssystemabsturz, einem Stromausfall oder einem Hardwarefehler besteht ebenfalls ein geringes Risiko für Datenverluste. Dies ist der Grund, warum Anwendungen, die 100% ig sicher sein müssen, dass sich die Daten auf der Festplatte befinden (z. B. Datenbanken / Finanz-Apps), weniger effizient, aber sicherer synchron schreiben. Um die Auswirkungen auf die Leistung zu verringern, verwenden viele Anwendungen immer noch asynchrone Schreibvorgänge, synchronisieren diese jedoch schließlich, wenn der Benutzer eine Datei explizit speichert (z. B. vim, Textverarbeitungsprogramme).
Auf der anderen Seite braucht und kümmert sich eine sehr große Mehrheit der Benutzer und Anwendungen nicht um die Sicherheit, die synchrone Schreibvorgänge bieten. Wenn es zu einem Absturz oder Stromausfall kommt, besteht das einzige Risiko darin, die letzten 30 Sekunden der Daten im schlimmsten Fall zu verlieren. Sofern es sich nicht um eine Finanztransaktion oder Ähnliches handelt, die einen Zeitaufwand von mehr als 30 Sekunden bedeuten würde, lässt der enorme Leistungszuwachs (der keine Illusion, sondern sehr real ist), dass asynchrone Schreibvorgänge das Risiko weitestgehend übertreffen.
Schließlich reichen synchrone Schreibvorgänge nicht aus, um die geschriebenen Daten zu schützen. Soll Ihre Anwendung wirklich sicherstellen, dass ihre Daten nicht verloren gehen, was auch immer passiert, muss eine Datenreplikation auf mehreren Festplatten und an mehreren geografischen Standorten eingerichtet werden, um Katastrophen wie Feuer, Überschwemmungen usw. zu widerstehen.