12. november 2002 - 13:34
Der er
17 kommentarer og 2 løsninger
Meget langsom database.....
Lige et spørgsmål.... Vi prøver at finde ud af om et ord findes i en database...... (Ordbog) Søgningen tager i JAVA med en ODBC connection hele 7-8 sekunder, hvor den i ASP kun tager 0.6 sekund... Det er en database med 366.000 ord.... I hver sin post..... Hvilken måde vil i anbefale os at bruge for at bringe vores søgetid ned på noget der minder om ASP´ens tid..?? -Anders
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
12. november 2002 - 13:36
#1
Det er din odbc bridge der er problemmet. Brug en rigtig database som f.eks. MySQL så skal du se performance :)
12. november 2002 - 13:41
#2
Hvis du opretter en forbindelse til databasen (ny connection) hver gang du vil slå et ord op, så ændr det til at forbindelsen bliver oprettet når programmet starter - så slipper du for at oprette objekter til højre og venstre. Der kan også være meget ved at anvende JDBC i stedet for ODBC - vel og mærke hvis man har en JDBC driver til den pågældende database.
12. november 2002 - 13:44
#3
Hvor meget forskel er der på Access og MySql.. Vel ikke hele 7-8 sekunder..?? -Anders
12. november 2002 - 13:47
#4
Ved enkelt-bruger adgang til lokal database er MS Access faktisk meget hurtig. Men JDBC-ODBC bridgen fra SUN har ikke noget godt ry. Jeg synes dog ikke rigtigt at det kan forklare 7-8 sekunder.
12. november 2002 - 13:47
#5
odbc er langsom, og jdbc-odbc bridgen er ikke særligt god heller. Kig også på idle's svar.
12. november 2002 - 13:52
#6
post lige din kode du bruger til at snakke med odbc bridgen med.
12. november 2002 - 13:52
#7
Det er ikke når vi åbner databasen problemet forekommer, men i selve søgningen... Vores søgealgorimte ser således ud.... while (rs.next()||!fundet) { tempOrd = rs.getString(1); if(ord.equals(tempOrd)) fundet = true; } Det er den som virkelig trækker tænder ud.... -Anders
12. november 2002 - 13:53
#8
Hvorfor ik lave det i sql?
12. november 2002 - 13:56
#9
Hvis Java'en skal oprette et resultset med 360k poster, så forstår jeg godt at det tager 7-8 sekunder!! Som magoo skriver, så skal der helt klart laves en SQL forespørgsel.
12. november 2002 - 13:56
#10
try { Statement statement = con.createStatement(); String query = "SELECT * FROM " + tableName; ResultSet rs = statement.executeQuery(query); try { while (rs.next()) { tempOrd = rs.getString(1); if(ord.equals(tempOrd)) fundet = true; } } catch(SQLException sqlex) { sqlex.printStackTrace(); Dialog.show("SQL Fejl",sqlex.toString()); } statement.close(); } catch(SQLException sqlex) { sqlex.printStackTrace(); Dialog.show("SQL Fejl",sqlex.toString()); }
12. november 2002 - 13:57
#11
12. november 2002 - 13:59
#12
String query = "SELECT * FROM " + tableName + " WHERE (kolonnenavn) = \"" + ord +"\"" eller noget i den stil ;-)
12. november 2002 - 14:00
#13
(kolonnenavn) skal så skiftes ud med det som kolonnen hedder i databasen. På den måde får databasen lov til at gøre det den er god til - at udvælge posten for dig. Java-en skal så også kun oprette et resultset med een post i stedet for 360000, hvilket mildest talt er lidt mindre hukommelses- og CPU-tungt.
12. november 2002 - 14:05
#14
og ret: while (rs.next()) { tempOrd = rs.getString(1); if(ord.equals(tempOrd)) fundet = true; } til while (rs.next()) { tempOrd = rs.getString(1); if(ord.equals(tempOrd)) { fundet = true; break; } } Hvis du endelig vil bruge den 'grimme' query, når du har fundet det du søger er der ingen grund til at forsætte i løkken.
12. november 2002 - 14:07
#15
idle.. Gider du at svare... Nu er vi altså nede på noget der ligner 0.3 sekund.. Med access.... Takker :o)
12. november 2002 - 14:09
#16
stregnt taget kan while-løkken lige så godt dø. If-sætningen er redundant i forhold til SQL-sætningen. Bare nøjes med: if (rs.getNext()){ tempOrd = rs.getString(1); fundet = true; } else fundet = false;
12. november 2002 - 14:10
#17
disky... - Hvad mener du helt præcis med "grimme" query. Kan det laves smartere el.????
12. november 2002 - 14:14
#18
ja med en where clausul som idle nævner.
12. november 2002 - 14:16
#19
Ja okay.... Så misforstod vi vist hinanden... Men mange tak for de fine svar... Dem er vi meget glade for... :o)
Kurser inden for grundlæggende programmering