weichei: NestedSets - kompletter Baum in Cache und PHP

Mittag,

ich verwende eine mysql-Tabelle für meine NestedSets, da sich dieser selten ändert dachte ich daran, diesen schonmal in ein mehrdimensionales Array zu legen und serialized für PHP zu speichern.

Dabei müsste ich Funktionen, die ansonsten über das DBMS laufen mit PHPP nachbilden.
Ist dies sinnvoll, wenn ich dann mit PHP nachbauen muss, oder sollte ich einfach die DBMS verwenden?

Gruß

  1. Liebes weichei,

    Ist dies sinnvoll, wenn ich dann mit PHP nachbauen muss, oder sollte ich einfach die DBMS verwenden?

    das kommt auf die Datenmenge an. PHP hat einen begrenzten Arbeitsspeicher zur Verfügung. Da kannst Du je nach Datenaufkommen an Grenzen stoßen. Ein DBMS hat seine eigenen Möglichkeiten, die von PHP völlig unabhängig sind.

    Es bleibt wohl ganz alleine  Deine Entscheidung die Du auf Grund Deiner Einschätzung fällen wirst.

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  2. Mittag,

    ich verwende eine mysql-Tabelle für meine NestedSets, da sich dieser selten ändert dachte ich daran, diesen schonmal in ein mehrdimensionales Array zu legen und serialized für PHP zu speichern.

    Dem entnehme ich die Implikation, dass Du den Cache auch zwischen Sitzungen erhalten willst un nicht nur innerhalb einer $_SESSION.

    Ist das so gedacht?

    Insgesamt gäbe es zu bedenken, dass Persistenzkosten auftreten und das Parsing beim Deserialisieren auch nicht billig ist.

    Dabei müsste ich Funktionen, die ansonsten über das DBMS laufen mit PHPP nachbilden.

    Ein wenig Concurrency-Handling zwischen Sitzungen würde erforderlich werden.

    Allerdings ist MySQL nicht sehr reich an Features für SP und Trigger; deshalb wäre vorab zu klären ob und wie MySQL eigentlich helfen könnte einen externen Cache zu invalidieren.

    Ist dies sinnvoll, wenn ich dann mit PHP nachbauen muss, oder sollte ich einfach die DBMS verwenden?

    Ach meiner Erfahrung mit Caching ist viel davon abhängig, welche Transportmechanismen insgesamt zum Einsatz kommen; eine (vlt. hypothetische) lokale MySQL-Verbindung via SharedMemory, die das DB-interne Caching nutzt und deren Daten nur noch in PHP-Objekte kopiert werdenn müssen könnte thereotisch schneller sein als eine Deserialisrung eines Filestreams.

    Ob die PHP-MySQL Interfaces (ausser den ODBC-basierten) ShMem-Verbindungen unterstützen weiss ich nicht aus dem Stehgreif; ein Performance-Test "Grosse PHP-Struktur befüllen per SELECT via performantester verfügbarer Verbindung vs. (De-)Serialisieren" würde Dir Aufschluss geben ob Caching insgesamt Sinn macht.

    Die "Nested Set" Performance hängt naturgemäß stark von der Performance des Index über den "links/rechts"-Feldern ab, also insbesondere davon, ob MySQL die Indices schon geladen hat; die geringe theoretische O-Komplexität kommt sonst nicht zum Tragen.

    Bei Messungen könnte dies zu "Ausreissern" führen.

    Grüsse

    Solkar

  3. Hallo,

    ich verwende eine mysql-Tabelle für meine NestedSets, da sich dieser selten ändert dachte ich daran, diesen schonmal in ein mehrdimensionales Array zu legen und serialized für PHP zu speichern.

    Warum serialisiert? Wenn Du Daten cachen willst, kannst Du Dir auch mal memcache ansehen. Wird Dir auf einem 0815-Hoster natürlich nichts nützen, aber Du hast ja nicht gesagt, wofür Du's entwickelst, könnte Dir ja u.U. weiterhelfen.

    Viele Grüße,
    Christian