Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
Alt 14.01.2009, 17:57 Nach oben    #1
Erfahrener Benutzer
 
Registriert seit: 16.08.2008
Ort: Mecklenburg-Vorpommern
Beiträge: 314
Standard Nested Sets oder doch eher rekursiv?

Hallo liebe Entwicklergemeinde!

Die Situation:

Ich habe eine Datenbank mit folgenden Tabellen:

Spezifische Bezeichnung (ca. 500 Datenzeilen)
Kategorie (ca. 30 Datenzeilen)
Subkategorie (ca. 10.000 Datenzeilen)
Argumente (ca. 6.000.000 Datenzeilen)

Meine Abfragen funktionieren rekursiv (warum, erkläre ich gleich).
Wenn eine Bedingung (z.B. Like "%BLABLABLA%") gegeben ist, dann soll er mir alle Spezifischen Bezeichnungen auslesen, die auf diese Bedingung passen.

Zurückgeliefert wird die ID der spezifischen Bezeichnung(spez_ID genannt), diese lautet z.B. 1

Mit dieser gehe ich dann in die Subkategorie und selektiere alle Einträge in dieser, bei denen die spez_ID = 1 ist und prüfe via PHP, ob eine bestimmte Bedingung auf irgendeine der Subkategorien passt. Wenn nicht, mache ich das selbe, nur eben in der Kategorie noch einmal.
Gehen wir mal davon aus, dass nun ein Eintrag passt, seine sub_ID wird zurückgeliefert (z.B. 100.
Da jede Sub_ID auch einer Kategorie_ID zuordbar ist, wird ebenfalls die Kat_ID zurückgegeben (z.B. 9)

Nun gehe ich in die Tabelle Argumente und selektiere alle Einträge, bei denen Sub_ID = 100 ist und suche dann in einer Spalte der Argumente (z.B. der Spalte "String") via LIKE nach einem bestimmten Wort - zurückgeliefert werden alle Argument_IDs die auf die Bedingung passen.
Im Ideal- und Regelfall ist das ein einziges Argument.

Das alles läuft rekursiv ab und ich setze mindestens 3, maximal 4 querys ab - da bestimmte Funktionen über MySQL nicht funktionieren, sind es mitunter auch 8 Querys für EINE Anfrage.

Nun ist es aber so, dass spez_ID eine Art Wurzel ist, da viele Einträge in "Subkategorie" auf eine spez_ID passen, weiterhin passen viele Argumente auf eine Subkategorie, aber auch Kategorie.

Anhand eines Beispieles erklärt (die Bedingungen außen vor gelassen) könnte man auch sagen,
dass es sich um ein großes Forum handelt,
das 500 Unterforen hat,
und jedes dieser 500 Foren hat weitere Subforen (aber keine eigenen Themen!), insgesamt also 10.000 Unterforen.
und jedes dieser Subforen hat Themen - insgesamt 6.000.000.
Alle Subforen sind bestimmten Kategorien zuzuordnen.

Ist es sinnvoll, die Bedingungen wieder berücksichtigend, das ganze via Nested Sets zwischen der Subkategorie und den Argumenten zu realisieren, oder ist mein Ansatz, unter Berücksichtigung, dass ich Bedingungen wie z.B. LIKE verwenden MUSS, ganz in Ordnung?

Danke

Geändert von Sekundentakt (14.01.2009 um 18:07 Uhr)
Sekundentakt ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.01.2009, 21:41 Nach oben    #2
Erfahrener Benutzer
 
Registriert seit: 16.08.2008
Ort: Mecklenburg-Vorpommern
Beiträge: 314
Standard

Hatte bisher niemand Erfahrungen mit solchen Strukturen gesammelt?
Sekundentakt ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 17.01.2009, 22:37 Nach oben    #3
Christian W. Achatz
 
Benutzerbild von dr.e.
 
Registriert seit: 05.02.2007
Ort: München
Beiträge: 198
Standard

Ich habe bisher immer das ParentID-Prinzip (=Rekursion) verwendet. Performance-Probleme sind dabei bisher nie entstanden.
__________________
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 (-> http://adventure-php-framework.org)!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.01.2009, 10:15 Nach oben    #4
Erfahrener Benutzer
 
Registriert seit: 16.08.2008
Ort: Mecklenburg-Vorpommern
Beiträge: 314
Standard

Ich habe mir auch schon überlegt, ob ich, aus Performancegründen, nicht einfach die 500 Superforen und ihre für die Bedingungen relevanten Daten gleich beim Aufrufen des Formulars in eine Session speichere und dann das Session-Array durchforste - das spart mir jeweils einen ganzen Query, wenn das erste Ergebnis unzufrieden war und man aus diesem Grunde die Bedingungen verändert.
Bei den 10.000 Subforen habe ich mich dagegen entschieden, weil diese durch das Ergebnis einer Überprüfung eines Superforums eingegrenzt werden - mit anderen Worten: Ich bräuchte vielleicht nur 5 Datensätze - und diese könnte mir MySQL auch zurückliefern, warum gleich alle 10.000 herunterladen?
Aber mehr verkürzen geht leider nicht mehr.

Warum ich wegen der Performance nachfrage?
Hier einmal ein Link zu einem Artikel, der mich zum Nachdenken gebracht hat.
Nested Sets
Sekundentakt ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.01.2009, 14:23 Nach oben    #5
Christian W. Achatz
 
Benutzerbild von dr.e.
 
Registriert seit: 05.02.2007
Ort: München
Beiträge: 198
Standard

Zitat:
Aber mehr verkürzen geht leider nicht mehr.
Das scheint mir jedoch schon ein guter Ansatz an Optimierung zu sein. Performantes Paging bilde ich üblicherweise auch über einen Session-Pager ab um nur einmal das Suchstatement ausführen zu müssen.

Zitat:
Warum ich wegen der Performance nachfrage?
Hier einmal ein Link zu einem Artikel, der mich zum Nachdenken gebracht hat.
Kannte ich. Nur warum das Path-Modell so begrenzt sein soll verstehe ich nicht. Gut, es hat Einschränkungen bei großen Strukturen, jedoch kann man die Struktur-Elemente eines Pfades auch klein halten und dadurch die Skalierbarkeit erhöhen. Mich hat bisher von Nested Sets immer abgehalten, dass das Schreiben für den Anwendungsfall oft zu komplex und zu langsam ist. Ich denke, für eine Entscheidung muss das komplette Anwendungsszenario beleuchtet werden.
__________________
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 (-> http://adventure-php-framework.org)!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Nested Sets - Problem mit erstellung der Tabelle kampfgnom Datenbanken 24 20.09.2007 14:26


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 Uhr.


Powered by vBulletin® Version 3.8.4 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.3.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47