Ankündigung

Einklappen
Keine Ankündigung bisher.

Nested Sets oder Rekursion?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Nested Sets oder Rekursion?

    Hallo Leute!

    Mich würde mal eins interessieren und das brennend,da man darüber immer wieder auseinandergehende Aussagen auffindet!

    Wann würdet ihr für das erstellen eines Kategoriebaums das Nested Sets Modell anwenden und wann das der Rekursion?

    Ich habe gelesen auf meinen Kreuzzügen durch das www das Nested Sets nur dann Sinn machen wenn eine Tiefe der baumstrucktur wenig bis gar nicht vorgenommen wird,weil ja dort jedes child zwei bezugspunkte hat soll das sehr kompliziert und sehr aufwendig in der Sql programmierung sein und nicht wirklich effektiv sein!
    Wenn eine feste Struktur bestehen bleibt dann ist das Nested Sets Modell wieder sehr empfehlenswert weil es die DB performance sehr schonend behandelt und man nur eine Sql Abfrage braucht in der alles geregelt ist!

    Bei einer Rekursion wiederum ruft sich ja immer wieder eine Funktion von selbst auf bis es zu einer Abruchbedingung kommt. Das heist aber auch bei einer tiefen Baumstrucktur wenn dann noch viele darauf zugreifen soll es wohl passieren können das die performance schlapp macht und die DB zusammenbricht!

    Eure Meinungen und Hilfreichen Beiträge würden mich interessieren und freuen!

    mfg der Litter
    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
    http://www.lit-web.de


  • #2
    Mich würde mal eins interessieren und das brennend,da man darüber immer wieder auseinandergehende Aussagen auffindet!
    Und was läßt Dich denken, dass es hier anders ist? Auch alles nur persönliche Meinungen. Soviel sei gesagt: Ich würde Nested Sets nur anwenden, wenn ich auch eine geeignetes Backend besitze, das meine Menüpunkte verwaltet. In der Datenbank-Verwaltung selbst sind N.S. schlecht zu handle'n.
    Da erschließt sich das Konzept mit parent ID's besser, allerdings ist das für häufige
    Änderungen der Menüstruktur nicht so geeignet.
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Ich will halt verschiedene Meinungen und darüber diskutieren!

      Ich bin der Meinung hat man zum Beispiel ein Shopscript da legt man sich ein haufen kategorien an,lässt man die bestehen ohne Anderungen und Verschiebungen machen zu wollen wäre nested Sets das richtige Modell halt wegen der performance. Macht man aber viele Verschiebungen und Änderungen wäre das eben nicht mehr so einfach zu realisieren und da würde wieder eine Rekurion sehr viel besser geeignet sein!

      Wann würde es denn wenn eine Rekursion benutzt wird die Performance so arg ins leiden kommen das die DB zusammenbricht?
      Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
      http://www.lit-web.de

      Kommentar


      • #4
        Hallo,

        Wann würde es denn wenn eine Rekursion benutzt wird die Performance so arg ins leiden kommen das die DB zusammenbricht?
        Ich habe ein Baum-Menü mit dem Parent-ID-Konzept umgesetzt und die Tabelle hat mittlererweile ~400 Einträge. Da ich konsequent nur diejenigen Bereiche selektiere, die ich auch aufgeklappt habe, ist Performance IMHO kein Problem. Wichtig ist nur, dass die Tabelle sauber indiziert ist.

        Nested Sets sehe ich genau wie nikosch nur dann, wenn du auch ein Backend hast, denn ohne ist das nicht wirklich sinnvoll zu handeln.
        Viele Grüße,
        Dr.E.

        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        1. Think about software design before you start to write code!
        2. Discuss and review it together with experts!
        3. Choose good tools (-> Adventure PHP Framework (APF))!
        4. Write clean and reusable software only!
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

        Kommentar


        • #5
          Rekursion, grade bei SQL ist halt so einer der wenigen richtig ueblen Performance-Killer. Entweder man beschraenkt sich wirklich auf einen sichtbaren Ausschnitt, wie dr.e. schon sagte, oder man nimmt fuer die groesseren Baeume wirklich Nested Set.
          "Mein Name ist Lohse, ich kaufe hier ein."

          Kommentar


          • #6
            Nunja,gehen wir mal davon aus wir haben eine Shopnavi. Wenn ich da auf einen Kategorielink klicke öffnet er die dazugehörigen Unterkategorien und das eben immer wieder ja nach dem wie tief fie Baumstrucktur ist!

            Demzufolge beschränke ich mich ja nur auf das was ich brauche oder habe ich das falsch verstanden?

            Bitte entschuldigt die aber was ist mit dem Begriff Backend gemeint?
            mfg der Litter
            Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
            http://www.lit-web.de

            Kommentar


            • #7
              Wenn du wirklich _alle_ Unterpunkte brauchst kannst du ja selbst ausrechnen, wie aufwendig das mit rekursiven SQL-Abfragen ist. Pro Knoten eine Abfrage.

              Natuerlich kannst du das mit PHP optimieren. Es kann sich lohnen einfach alle Eintraege auszulesen und das ganze dort zusammenzubauen.

              Nested Set ist halt von Vorteil, wenn du alle Untermenuepunkte unabhaengig von Tiefe oder Anzahl der Knoten haben willst, weil du einfach nur Links/Rechts angeben musst - alles was dazwischen liegt ist ein Untermenue.

              Mit Backend ist hier vermutlich eine Abstraktion der SQL-Operationen gemeint, die du benoetigst um Knoten zu verschieben, anzuhaengen oder zu entfernen.
              "Mein Name ist Lohse, ich kaufe hier ein."

              Kommentar


              • #8
                Mit Backend ist hier vermutlich eine Abstraktion der SQL-Operationen gemeint, die du benoetigst um Knoten zu verschieben, anzuhaengen oder zu entfernen.
                Exakt, denn sonst wird das Statement-Schreiben aufwändig.

                Fall du dich für ein Beispiel interessierst, habe ich hier was für dich: http://adventure-php-framework.org/f...umstruktur.zip das ist eine Umsetzung der Rekursionsmethode. Der Cod eist zwar schon steinalt, aber er zeigt, wie das prinzipiell funktioniert. Caching und Optimierungen kann man dann immer noch drüberlegen.
                Viele Grüße,
                Dr.E.

                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                1. Think about software design before you start to write code!
                2. Discuss and review it together with experts!
                3. Choose good tools (-> Adventure PHP Framework (APF))!
                4. Write clean and reusable software only!
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                Kommentar


                • #9
                  Danke recht schön ich werde mir das auf alle Fälle mal anschauen.

                  Ich habe ja auch schon über Nested Sets gelesen und Beispiel Code aber das war irgendwie sehr kompliziert zu verstehen!
                  Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                  http://www.lit-web.de

                  Kommentar

                  Lädt...
                  X