Manuel Massoth: fehler durch exzessive belastungen

Hi,

Undzwar habe ich probleme mit einer text-datenbank, die ich
in einem Bannertausch einsetze. Teilweise generieren
mitglieder bis zu 9.000 lese-/schreibzugriffe pro tag.
jetzt kommt es abundzu vor, dass einige felder formatiert werden..
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?

benutze folgende methode:
open (Pmemfile,">filexy.dat");
print Pmemfile ("inhaltxy");
close(Pmemfile);

Gruß
Manuel Massoth

  1. Moin,

    Problem von Text-Datenbanken ist, oder ob es einfach nur daran liegt, das ich unsauber programmiert habe?

    Das Problem ist, dass verschiedene Prozesse gleichzeitig schreibend auf deine Datei zugreifen. Dh. Es werden von zwei verschiedenen Prozessen gleichzeitig Daten in die Datei geschrieben, was nat. nicht gut laufen kann. Du solltest die Datei locken, wenn du schreibend darauf zugreifst.
    Wenn ich deinen Beispielscode richtig interpretiere nutzt du Perl, oder? Deswegen solltest du man "perldoc -f flock" lesen, da steht was du machen musst.
    9000 lese/schreibzugriffe sollten absolut kein Problem sein, wenn man es richtig macht.

    Grüße Andres Freund

    PS: Es ist in der Perl Gemeinde de facto Standard, dass Dateihandles groß geschrieben werden.

    --
    ss:) zu:) ls:} fo:) de:] va:) ch:| n4:& rl:° br:^ js:( ie:% fl:( mo:|
  2. Hi,

    Undzwar habe ich probleme mit einer text-datenbank,

    was ist eine Text-Datenbank? Falls Du eine Datei meinst: Die ist _weit_ davon entfernt, irgendetwas mit einer Datenbank zu tun zu haben.

    Teilweise generieren
    mitglieder bis zu 9.000 lese-/schreibzugriffe pro tag.

    Oh. Ich dachte zunächst, Du meintest Zugriffe pro Sekunde, was bisweilen schon ein kritischer Bereich sein könnte. Wenn diese Menge pro Tag aber Probleme macht, dann hast Du etwas ganz grundlegendes falsch gemacht.

    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?

    Es liegt daran, dass es - wie ich Deinem Codebeispiel entnehme - sich nicht im mindesten um eine Datenbank handelt, sondern Du nur eine Datei beackerst, ohne Dich um die - existierenden - parallelen Zugriffe zu kümmern.

    benutze folgende methode:

    Ist das Perl?

    open (Pmemfile,">filexy.dat");

    perldoc perlstyle (Klammern und Namen), Singlequotes statt Doublequotes, wo diese nicht benötigt werden.

    print Pmemfile ("inhaltxy");

    Wozu dieser Listenkontext?

    close(Pmemfile);

    Bei _allen_ Öffnungsvorgängen und _allen_ Schließungen zum Schreiben geöffneter Dateien _immer_ den Fehlerfall abfangen. Ferner:

    perldoc -f flock
    perldoc perlopentut

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  3. 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/>.
  4. Halihallo Manuel

    [...]
    BTW: Cheatah hat bewusst das Wort "Datenbank" kritisiert. Denn genau Datenbanken sorgen
    _selber_ für diese Integrität (einer der Vorteile von DBMS). Bei 9000 Requests/Tag wäre
    der Gedanke an eine Datenbank ggf. ratsam (obwohl hier textuelle, auf Flat-file
    basierende Lösungen oftmals mehr performanceschonend sind).

    Nun, war nur ein Gedanke. Eine Flatfile-Lösung halte ich nicht für minder gut. Im
    Gegenteil, aber man muss sich schon etwas dabei überlegen...

    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/>.