Toon posts:

[asp] recursief database script optimalizer

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb zoals velen anderen geprobeerd om eenvoudig een tree op te slaan in een relationele database. Ik ben op de hoogste van het nested set verhaal van Celko, maar heb op dit moment geen tijd om dat toe te passen aangezien de uitwerking een stuk ingewikkelder is als het recursive model.

De 3 belangrijkste velden in de table zijn ID, ParentNode en Value (de andere velden zijn niet van belang want die hebben alleen betrekking op de Value en niet op de structuur) Ik heb in 5 minuten tijd een eerste aanzet gegeven (quite ranzig) waarvan ik verder wil gaan werken.

De snelheid van het script is op dit moment niet gek verkeerd, maar dat komt omdat er in totaal maar 60 records in de database staat dus de tree ook vrij beperkt is gebleven verder.

Grootste nadeel is dat ik elk level in de tree handmatig moet maken, er is dus geen oneindig diepe tree mogelijk, wat natuurlijk wel de bedoeling is.

De code:

code:
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
<%

    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.Open "SELECT *  FROM Structure 
    Where  Parentnode =  0", 
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=pad.mdb'"

    Set rs1 = Server.CreateObject("ADODB.Recordset")
    rs1.Open "SELECT *  FROM Structure",
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='pad.mdb'"

    Set rs2 = Server.CreateObject("ADODB.Recordset")
    rs2.Open "SELECT *  FROM Structure", 
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='pad.mdb'"

    Set rs3 = Server.CreateObject("ADODB.Recordset")
    rs3.Open "SELECT *  FROM Structure", 
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='pad.mdb'"

    Do Until rs.EOF
    Response.Write("-" & Rs("Value") & "<br />")
    rs1.Filter = "parentnode = "&Rs("ID")
    Do Until rs1.EOF
    Response.Write("--" & Rs1("Value") & "<br />")
    rs2.Filter = "parentnode = "&Rs1("ID")
    Do Until rs2.EOF
    Response.Write("---" & Rs2("Value") & "<br />")
    rs3.Filter = "parentnode = "&Rs2("ID")
    Do Until rs3.EOF
    Response.Write("----" & Rs3("Value") & "<br />")
    rs3.movenext        
    Loop
    rs2.movenext        
    Loop
    rs1.movenext        
    Loop
    rs.movenext     
    Loop
    rs.Close
    rs1.Close
    rs2.Close
    rs3.Close

%>


Waar kan ik het beste beginnen met het verbeteren van dit script, hoe kan ik ervoor zorgen dat er meer dan 4 niveaus worden ondersteund en hoe krijg ik de performance omhoog aangezien wanneer de tree snel groeit hij waarschijnlijk ook onevenredig veel langzamer wordt.

Uiteindelijk schrijft dit script een xml bestand wat gekoppeld aan een xsl bestand de navigatie van een site gaat verzorgen.

[ Voor 11% gewijzigd door Verwijderd op 30-03-2004 12:16 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Waarom doe je dit niet mbhv een stored procedure en tmp tables?

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 30 maart 2004 @ 12:16:
Waarom doe je dit niet mbhv een stored procedure en tmp tables?
Omdat er in een access database geen stored procedures zitten en de klant geen sql server / msde wil draaien....

Maar ik zal wel even kijken naar de stored procs, heb je daar een goede bron voor?

  • j_du_pee
  • Registratie: Maart 2000
  • Laatst online: 23-09-2024

j_du_pee

du pain, du vin, du pee

RS.filter vertraagt enorm. Als je mbv rs.getrows het geval in een array zet en vervolgens zelf een filterroutine schrijft neemt de snelheid schrikbarend toe :)

[ Voor 21% gewijzigd door j_du_pee op 30-03-2004 12:21 ]

kaart != map && bottel != fles
Wacht op antwoord


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:32
Tja, als je geen dbms gebruikt die SP's ondersteund, dan is het ook niet nuttig om er naar te kijken. (Tenzij je er zowiezo iets wilt over leren).

Op sites zoals SQL Team oid zullen er wel tutorials te vinden zijn wb SP's.

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 30 maart 2004 @ 12:20:
Tja, als je geen dbms gebruikt die SP's ondersteund, dan is het ook niet nuttig om er naar te kijken. (Tenzij je er zowiezo iets wilt over leren).
Ja daarvoor ben je toch dev'ver anders was ik wel ambtenaar geworden ;)
Op sites zoals SQL Team oid zullen er wel tutorials te vinden zijn wb SP's.
ja het principe is mij bekend, maar ik was op zoek naar iets concreets mbt - Recursive / SP

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 26-05 22:23

NMe

Quia Ego Sic Dico.

Verwijderd schreef op 30 maart 2004 @ 12:14:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    Do Until rs.EOF
    Response.Write("-" & Rs("Value") & "<br />")
    rs1.Filter = "parentnode = "&Rs("ID")
    Do Until rs1.EOF
    Response.Write("--" & Rs1("Value") & "<br />")
    rs2.Filter = "parentnode = "&Rs1("ID")
    Do Until rs2.EOF
    Response.Write("---" & Rs2("Value") & "<br />")
    rs3.Filter = "parentnode = "&Rs2("ID")
    Do Until rs3.EOF
    Response.Write("----" & Rs3("Value") & "<br />")
    rs3.movenext        
    Loop
    rs2.movenext        
    Loop
    rs1.movenext        
    Loop
    rs.movenext     
    Loop
Misschien een gekke vraag, maar wat is hier nou recursief aan? Je post hier een lap iteraties, en in zijn geheel is je script brute force gecode. Misschien kun je proberen om het echt recursief te maken, dan hoef je niet alle niveaus apart te definiëren als recordset...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
NMe84 schreef op 30 maart 2004 @ 12:48:
[...]

Misschien een gekke vraag, maar wat is hier nou recursief aan? Je post hier een lap iteraties, en in zijn geheel is je script brute force gecode. Misschien kun je proberen om het echt recursief te maken, dan hoef je niet alle niveaus apart te definiëren als recordset...
De database is recursief (soort van) het script nog niet, dat moet ik verder uitbouwen, dat was ook de aanleiding van cette topic

  • JJvG
  • Registratie: Juli 2003
  • Laatst online: 27-04 16:49
Ik heb effe voor je gezocht en de volgende pagina gevonden:

http://www.4guysfromrolla.com/webtech/101202-1.shtml

Volgens mij moet het daar mee lukken. Doe er je voordeel mee!

  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Verwijderd schreef op 30 maart 2004 @ 12:14:
Ik heb zoals velen anderen geprobeerd om eenvoudig een tree op te slaan in een relationele database. Ik ben op de hoogste van het nested set verhaal van Celko, maar heb op dit moment geen tijd om dat toe te passen aangezien de uitwerking een stuk ingewikkelder is als het recursive model.
Als je geen tijd hebt om het goed te doen, heb je ook geen tijd om het 2 keer te doen.

  • Skaah
  • Registratie: Juni 2001
  • Niet online
Zoiets is het idee:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
getNode();
functie getNode($id=1)
{
  echo "<ul>";
  $query = "SELECT ID, Value FROM Structures WHERE ParentNode = ".$id;
  $result = mysql_query($query);
  while($row = mysql_fetch_array($result)) // zolang er nog rijen zijn, doe...
  {
    echo "<li>".$row['Value']."</li>";
    getNode($row['ID']); // de functie roept zichzelf aan
  }
  echo "</ul>";
}

De functie roept zichzelf aan. Dit gaat zo diep als je maar wilt. Dit moet je nog wel even omzetten naar ASP.

[ Voor 86% gewijzigd door Skaah op 30-03-2004 15:42 ]

Pagina: 1