Philipp Hasenfratz: fehler durch exzessive belastungen

Beitrag lesen

Halihallo Manuel

manchmal auch die ganze datei ansich. Da ich kein 'richtiger' programmierer bin frage ich mich ob das ein grundsätzliches
Problem von Text-Datenbanken ist, oder ob es einfach nur daran liegt, das ich unsauber programmiert habe?

Naja, ein bisschen von beidem. Du spürst schlicht die Auswirkungen von konkurrierenden
Schreibzugriffen. Falls einmal zwei Page- bzw. Adviews zur selben Zeit generiert werden,
kann es vorkommen, dass die zwei offenen Dateihandles nicht synchonisiert
niedergeschrieben werden und so Daten überschrieben werden.
Es steht nun bei Text-Datenbanken im Interesse des Programmierers, dem Computer die
synchronisation bzw. das Recht zum Schreiben zu vergeben. Dies kannst du über
File-locking (s. perldoc -f flock und *nix manpages) erzwingen.

Etwas einfach ausgedrückt sagst du damit:
So, jetzt will ich (der eine Prozess) schreiben, du sollst warten, bis ich das getan
habe und dann darfst du.

Achte beim Locking jedoch auch darauf, dass du Daten ggf. liest, dann die Datei zum
schreiben öffnest und die geänderten Daten dort hineinschreibst. Wer garantiert dir,
dass während dem Verarbeiten der eingelesenen Daten (also zwischen lesen und schreiben),
die Daten durch einen anderen Prozess schon wieder verändert wurden? - Niemand!

Für Deinen Fall könnte ich mir vorstellen, dass es noch eine weitaus
performanceschonendere Möglichkeit gibt, wenn du Dateien nur zum Schreiben benutzt und
zwar sequenziell (also nur jeweils eine Zeile pro Datensatz anhängen musst, dies
funktioniert IMHO auch ohne flock sicher). Vielleicht ist es möglich, alle komplexeren
Abfragen und Mutationen des Datenbestandes a) auf niederfrequentiertere Zeiten zu
verlegen und b) in einem völlig unabhängigen Prozess zu machen (der jetzt aber wiederum
voll auf flock setzt).

Viele Grüsse

Philipp

--
RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.