Re: JAVA vs PERL : PERL wins to postgreSQL - Mailing list pgsql-jdbc
From | Kovács Péter |
---|---|
Subject | Re: JAVA vs PERL : PERL wins to postgreSQL |
Date | |
Msg-id | 8A2DDD7ED7876A4698F6FF204F62CBFCD307C4@budg112a.sysdata.siemens.hu Whole thread Raw |
In response to | JAVA vs PERL : PERL wins to postgreSQL (andy <andy@exkom.co.za>) |
List | pgsql-jdbc |
The obvious question is whether the PERL-script is also executing in one transaction. If it is not, we're "cheating" setting autocommit off in the JDBC-test app. (I did not look at the code, since I am not familiar with the PGSQL's PERL-interface anyway.) Peter > -----Original Message----- > From: Barry Lind [mailto:barry@xythos.com] > Sent: Tuesday, September 04, 2001 6:49 PM > To: andy > Cc: pgsql-jdbc@postgresql.org > Subject: Re: [JDBC] JAVA vs PERL : PERL wins to postgreSQL > > > Andy, > > Thanks for the code. In looking at this there are two things > that come > to mind: > > 1) You probably should be running vacuum after the delete to > clean up > the table, but on a table this small, I doubt it will make any real > difference. > > 2) Why have you set autocommit on? This should be much faster with > autocommit off. > > Actually I just did a quick test of the two changes I > mentioned above. > The first (vacuum) doesn't make any noticable difference, however > turning autocommit off causes the timings on my machine to go from 14 > seconds to 6 seconds. Better than 50% improvement. > > thanks, > --Barry > > > andy wrote: > > To all those who responded , > > Thanks for your response, > > > > I have attached the test programs that I used in the form > of text files. The > > contents should be self evident. Please have a look and comment. > > > > I used j2sdk1.3.1 down load to linux machine from sun.com > as my java platform > > and > > And perl, v5.6.0 built for i386-linux. > > The PostgreSQL driver for perl came from www.perl.org > > The postgreSQL driver in jdbc7.0-1.2.jar > > > > > > Barry Lind wrote: > > > > > >>Andy, > >> > >>I would be interesting in knowing what version you did this test on, > >>what platform, and most importantly which JDK (and if the > Sun JDK which > >>JVM: classic, hotspot client, hotspot server). > >> > >>thanks, > >>--Barry > >> > >>andy wrote: > >> > >>>Hi, > >>> > >>>I ran a few bench marks on JAVA writing to a postgreSQL > table using and > >>>found that for the same number of records added to the table as a > >>>similar PERL routine the following results : > >>> PERL 39 seconds : JAVA 45 Seconds. > >>>In a similar experiment where PERL and JAVA did treir output to the > >>>screen and not to a table, > >>> > >>>JAVA took 3 seconds and PERL 310 Seconds. > >>>My conclusion is that the database driver to postgreSQL is > still far > >>>from efficient in the JAVA implementation. > >>> > >>>Both tests were run on the same computer. > >>> > >>>I would appreciate your comments and suggestions. > >>>Andy Sewell > >>> > >>> > >>>---------------------------(end of > broadcast)--------------------------- > >>>TIP 5: Have you checked our extensive FAQ? > >>> > >>>http://www.postgresql.org/users-lounge/docs/faq.html > >>> > >>> > >>> > >>> > >>>----------------------------------------------------------- > ------------- > >>> > >>>/* > >>> Java bench mark against perl count to 100 000 000 > >>>*/ > >>>import java.io.*; > >>>import java.util.*; > >>> > >>>public class lp{ > >>> > >>> public lp() throws ClassNotFoundException, > FileNotFoundException, IOException > >>> { > >>> int last = 1000; > >>> > >>> GregorianCalendar day = new GregorianCalendar(); > >>> String time = day.getTime().toString(); > >>> int k=0; > >>> for (int i=0; i<last ; i++) { > >>> for (int p=0; p<last ; p++) > {k=1+p;System.out.println(k);} > >>> } > >>> > >>> GregorianCalendar day1 = new GregorianCalendar(); > >>> String time2 = day1.getTime().toString(); > >>> System.out.println(time); > >>> System.out.println(time2 + "\n" + k); > >>> > >>> > >>> } > >>> > >>>public static void main(String[] args) { > >>> try { > >>> lp test = new lp(); > >>> } > >>> catch (Exception ex) { > >>> System.err.println("Exception :" + ex); > >>> ex.printStackTrace(); > >>> } > >>>} > >>>} > >>> > >>> > >>> > >>>----------------------------------------------------------- > ------------- > >>> > >>>/* > >>> Java equivalent > >>>*/ > >>>import java.io.*; > >>>import java.sql.*; > >>>import java.util.*; > >>> > >>>public class pg{ > >>> Connection conn; > >>> Statement stmt; > >>> > >>> public pg() throws ClassNotFoundException, > FileNotFoundException, IOException, SQLException > >>> { > >>> Class.forName("org.postgresql.Driver"); > >>> conn = > DriverManager.getConnection("jdbc:postgresql:exkom", "andy", ""); > >>> conn.setAutoCommit(true); > >>> stmt = conn.createStatement(); > >>> int last = 10000; > >>> int res = stmt.executeUpdate("delete from junk"); > >>> > >>> GregorianCalendar day = new GregorianCalendar(); > >>> String time = day.getTime().toString(); > >>> > >>> for (int i=0; i<last ; i++) { > >>> // try { > >>> res = stmt.executeUpdate("insert into > junk values(" + i + ")"); > >>> > >>> // } catch (SQLException e) { > >>> // System.out.println(e); > >>> // } > >>> } > >>> > >>> GregorianCalendar day1 = new GregorianCalendar(); > >>> String time2 = day1.getTime().toString(); > >>>// String time3 = day.getTime().toString(); > >>> System.out.println(time); > >>> System.out.println(time2); > >>>// System.out.println(time3); > >>> > >>>// res.close(); > >>> stmt.close(); > >>> conn.close(); > >>> > >>> > >>> } > >>> > >>>public static void main(String[] args) { > >>> try { > >>> pg test = new pg(); > >>> } > >>> catch (Exception ex) { > >>> System.err.println("Exception :" + ex); > >>> ex.printStackTrace(); > >>> } > >>>} > >>>} > >>> > >>>/** > >>> > >>> > >>>$conn = Pg::connectdb("dbname=exkom"); > >>>die $conn->errorMessage unless PGRES_CONNECTION_OK eq > $conn->status; > >>> > >>># print "Enter a state code :"; > >>># $state_code = <STDIN>; > >>> > >>># chomp $state_code; > >>>$result = $conn->exec("delete from junk"); > >>>$end = 10000; > >>> > >>>$t0 = new Benchmark; > >>> > >>>for ($i=1; $i < $end; $i++) { > >>> $result = $conn->exec("insert into junk values($i)"); > >>>} > >>> > >>>$t1 = new Benchmark; > >>>$td = timediff($t1, $t0); > >>>print " the $end records took :", timestr($td) , "\n" > >>>**/ > >>> > >>> > >>>----------------------------------------------------------- > ------------- > >>> > >>> > >>>---------------------------(end of > broadcast)--------------------------- > >>>TIP 3: if posting/reading through Usenet, please send an > appropriate > >>>subscribe-nomail command to majordomo@postgresql.org so that your > >>>message can get through to the mailing list cleanly > >>> > >>> lp.java > >>> > >>> Content-Type: > >>> > >>> text/plain > >>> Content-Encoding: > >>> > >>> 7bit > >>> > >>> > >>> > -------------------------------------------------------------- > ---------- > >>> lp.pl > >>> > >>> Content-Type: > >>> > >>> application/x-perl > >>> Content-Encoding: > >>> > >>> 7bit > >>> > >>> > >>> > -------------------------------------------------------------- > ---------- > >>> pg.java > >>> > >>> Content-Type: > >>> > >>> text/plain > >>> Content-Encoding: > >>> > >>> 7bit > >>> > >>> > >>> > -------------------------------------------------------------- > ---------- > >>> pg.pl > >>> > >>> Content-Type: > >>> > >>> application/x-perl > >>> Content-Encoding: > >>> > >>> 7bit > >>> > >>> > >>> > -------------------------------------------------------------- > ---------- > >>> Part 1.6 > >>> > >>> Content-Type: > >>> > >>> text/plain > >>> Content-Encoding: > >>> > >>> binary > >>> > >>> > > > > ---------------------------(end of > broadcast)--------------------------- > TIP 5: Have you checked our extensive FAQ? > http://www.postgresql.org/users-lounge/docs/faq.html
pgsql-jdbc by date: