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 fra Idura
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