Neuer Artikel: Sperren von Dateien

Oftmals sind Dateisperren ein Thema, das nur kurz in Funktionsreferenzen der jeweiligen Programmiersprache abgehandelt wird. Dort wird dann die Funktion, ihre Parameter und ihr Rückgabewert angegeben und eventuell werden ein paar kleinere Hinweise gegeben, aber ein wirklich tieferes Verständnis wird dort nicht vermittelt. Ferner finden sich in vielen Foren und Boards oftmals fehlerhafte Beispiele, die die Sperren im Endeffekt nutzlos machen können.

Diese Lücke versuche ich mit dem neuen Artikel »Sperren von Dateien« zu schließen: Dort wird ein solides Hintergrundwissen vermittelt, wie Dateisperren funktionieren, auf welche Weise sie in verschiedene Betriebsystemen implementiert sind und welche Konsequenzen unter anderem Threads, über das Netzwerk eingebundene Dateisysteme oder das Zusammenspiel von verschiedenen Programmiersprachen haben können. Zudem wird an Hand von konkreten Beispielen in den Programmiersprachen PHP, Perl, Python und Java erläutert, wie man Dateisperren korrekt einsetzt.

Link zum Artikel: »Sperren von Dateien«

3 Kommentare » Schreibe einen Kommentar

  1. sven hat vermutlich noch nicht so ganz durchdacht, dass ausnahmslos ALLE Arten von Speicherung in Multitasking-Umgebungen Locking erfordern. Sowohl in Dateien, wie dargestellt, aber genauso auch in Datenbanken – und sogar direkt im RAM. Immer muß irgendeine Instanz dafür sorgen, dass die Speicherzellen, die gleich für die Aufnahme neuer Informationen vorgesehen sind, vor jeglichem Zugriff von parallel ablaufenden Prozessen geschützt sind.

    Bei manchen Speicherarten, wie z.B. Dateien, muß sich der Programmierer darum selbst kümmern. Bei anderen, wie z.B. Datenbanken, kümmert sich die Datenbank darum. Aber das grundlegende Problem bleibt: Wenn irgendwo von einem Prozess aus etwas geschrieben wird, wird dafür eine exklusive Sperre benötigt, die verhindert, dass zur gleichen Zeit dieser Bereich von irgendeinem anderen Prozess gelesen werden kann.

    Insofern ist es schon wichtig, dass man sich über das Locking seine Gedanken macht – denn es wird insbesondere dann zum Problem, wenn Schreiben und Lesen intensiv gemischt vorkommen. Egal ob Datei oder Datenbank. Selbst im RAM kann das noch unperformant langsam werden, wenngleich man dort immerhin etliche Zehnerpotenzen schnelleren Zugriff hat, als auf Festplatte.

  2. Recht umfassend und informell geschrieben. Ich frag mich nur, wo der Zusammenhang zu Webprogrammierung besteht. Natürlich könnte man (wie im Beispiel) Counter oder Gästebücher auf diese Weise programmieren, aber so ein Konzept ist blöd, denn schließlich müssen anders zugreifende Programme dann immer warten. Für Webseiten mit schneller Ladegeschwindigkeit tödlich.

    Ich beschrieb bereits in meiner Einleitung das Problem, für das man Dateisperren benötigt.

    Natürlich ist es eher schlecht, wenn Programme auf etwas warten müssen. Allerdings: Wenn sie das nicht tun, dann kann es zu Datenverlusten kommen oder die Dateien enthalten plötzlich Kauderwelsch. Denn gerade bei Webseiten mit hohem Traffic, ist die Wahrscheinlichkeit sehr hoch, dass zwei Prozesse gleichzeitig auf eine Datei zugreifen wollen. Ohne Dateisperren kann es durchaus passieren, dass alle Gästebuchkommentare bis auf den letzten einfach verschwunden sind.

    Zudem: Mitbenutzbare Sperren ("Shared Locks") können koexistieren, das heißt, solange nur gelesen wird, schränken Sperren die Geschwindigkeit keineswegs ein – erst, wenn auf die Dateien geschrieben werden soll, muss gewartet werden.

    Ich halte es daher für essentiell, dass Scripte, die Dateien verwenden, diese auch sperren, damit es eben nicht zum Datenverlust kommt. Deswegen habe ich den Artikel geschrieben, damit dieses Thema, das im Webumfeld entweder gar nicht oder oftmals falsch behandelt wird, etwas mehr in den Vordergrund gerückt wird.

    Wenn du also sagst, "das Konzept ist blöd", dann würde ich gerne wissen, welche Alternative du vorschlägst, um Datenverlust zu vermeiden?

  3. Recht umfassend und informell geschrieben. Ich frag mich nur, wo der Zusammenhang zu Webprogrammierung besteht. Natürlich könnte man (wie im Beispiel) Counter oder Gästebücher auf diese Weise programmieren, aber so ein Konzept ist blöd, denn schließlich müssen anders zugreifende Programme dann immer warten. Für Webseiten mit schneller Ladegeschwindigkeit tödlich.