Michael Schröpl: DBI, Rekursion, prepared statements

Beitrag lesen

Hi Cruz,

Die Funktion schlängelt sich durch solange sie über die gefundenen Verzeichnisse loopt oder sich
selbst aufruft, um eine Ebene tiefer zu gehen. Beim ersten "zurückspringen" auf einen höhere Ebene,
(d.h. keine Unterverzeichnisse gefunden) hört sie dann auf. Das preparte Statement scheint verloren
gegangen zu sein.

ich kann mir gut vorstellen, daß das Probleme machen könnte.

Dein Programm führt ja _eine_ Session mit der mySQL-Datenbank.
Diese weiß nicht, daß Du ggf. dasselbe Statement aus mehreren Ebenen
abfeuern und damit parallele "prepares" vorrätig halten willst.

Die Frage ist einfach, nach welchen Kriterien mySQL Dich mehrere Statements
parallel im prepare-Zustand vorrätig halten läßt. Das kostet ja Ressourcen

  • und zwar nicht Deinen Task, sondern den mySQL-daemon.
    Die Struktur innerhalb der Datenbank, die Deine vorbereiteten Statements
    speichern sollte, müßte genau wie Dein eigener Code reentrant sein (Deine
    Statement-Handles sind ja lokale und damit disjunkte Variablen - aber ihre
    Abbilder innerhalb des mySQL-Servers vielleicht nicht). Das wäre ggf. teuer.

Kannst Du Deinen Algorithmus so umgestalten, daß Du die Rückkehr aus der
Rekursion nicht brauchst?
(Beispielsweise, indem Du zuerst alle rows einer Ebene in einen Array auf-
sammelst und erst von diesem aus alle rekursiven Aufrufe fütterst. Das wäre
dann immer noch dieselbe Traversierungsreihenfolge in Deinem Baum.)

Viele Grüße
      Michael