dedlfix: MySQL 5.0 alle Kinder auflisten

Beitrag lesen

Hi!

ich habe etwas mit DB_NestedSet "rumgespielt". Das funktioniert soweit ganz gut.
DB_NestedSet verwendet eine lock-Tabelle, ich gehe mal davon aus, dass es Transaktionen dann nicht unterstützt.

Vermutlich ist das so. Denn MySQL unterstützt Transaktionen nur mit der InnoDB-Engine, nicht mit der MyISAM-Engine. (Beim Erstellen von Tabellen kann man die Engine angeben.) Weiterhin sind die PEAR-DB-Pakete in der Regel so ausgelegt, dass sie mit vielen DBMS zusammenarbeiten. Da muss man Kompromisse schließen. Die einen können keine Transaktionen, der Lock-Mechanismus ist überall anders und so weiter und so fort. Da ist es einfacher (aber sicher weniger performant) ein eigenes System aufzusetzen.

Die Entscheidung liegt bei dir: Verwende das generelle Paket, such dir ein spezialisiertes oder nimm nur die Ideen und implementiere eigene Querys, angepasst an dein DBMS (und ggf. Storage-Engine).

Je nachdem, was du insgesamt vorhast, kann auch ein Serialized LOB eine Lösung sein. Vor allem, wenn der Datenbestand recht klein ist. Dabei wird die komplette Datenstruktur (beispielsweise ein (verschachteltes) Array in PHP) in einen String serialisiert und dieser gespeichert. Beim Lesen braucht man nur zu unserialisieren und hat die Struktur gleich fix und fertig vorliegen. Die Datensätze in Einzelteilen im DBMS abzulegen erfordert ja auch üblicherweise (egal ob NS oder Parent-Verweise) nach dem flachen Lesen, sie passend im Baum einzuhängen.

was meinst Du mit Serialized LOB?

Hab ich doch erklärt. Den Begriff hab ich mir auch nicht grad eben erst ausgedacht, man findet dazu auch Information. LOB steht für Large OBject. Serialisiert ist unter PHP das, was serialize() als Ergebnis liefert. Das ist ein String, der eine fertig aufgebaute Datenstruktur repräsentiert. Ein unserialize() auf den String und schon hat man die Datenstruktur wieder. Eignet sich um komplexe Datenstrukturen abzulegen, bei denen man im Ablagemedium nicht auf die Einzelteile zugreifen möchte/muss.

Lo!