I suspect that ClojureQL and with-connection are opening and closing
the connection for every query, whereas the Java and Perl versions are
reusing their connections.

Try adding a connection pool to the mix.

On Tue, Jan 18, 2011 at 19:32, rygorr <ryg...@gmail.com> wrote:
> I'm currently doing some preliminary performance testing of db inserts
> with various technologies.  The db server itself is nothing special
> but what surprised me was the difference in INSERT speeds between
> Clojure and the other solutions I've tried.  Clearly there is
> something I'm missing so perhaps I can get some insight.
>
> Java code INSERT was about 500 rows/sec.  The Clojure code was about
> 30 rows/sec (both ClojureQL and with-connection versions).  Perl DBI
> and ObjC were both around 500 rows/sec.  I'm comparing relative speed
> -- the 'mysql server' is just a mac-mini running Mysql 5.0.  While I
> recognize this is a pretty simplistic seat-of-the-pants test I wasn't
> expecting 16x slower.
>
> ClojureQL code:
> (def test (sql/table db :test))
> (doseq [x (range 2000)]
>    @(sql/conj! test [{:value x}]))
>
> Vanilla clojure code I tried as well.
> (doseq [x (range 2000)]
>    (with-connection db
>       (insert-values :test
>                      [:value] [x])))
> db is the com.mysql.jdbc.Driver connection string.
>
> Pure Java:
>        for(int i = 2000 ;  i>0 ; i--){
>            try {
>                java.sql.Statement s = conn.createStatement();
>                s.executeUpdate("insert into test (value) values(" + i + ")");
>            }
>            catch (Exception e) {
>                System.out.println(e);
>                System.exit(0);
>            }
>        }
> where conn here is again my com.mysql.jdbc.Driver connection string.
>
> I used the same mysql-connector-java jar for all tests on the JVM.
> Initially my tests were run in the cake-swank JVM.  To try to
> eliminate any variables I also created a jar with lein and tested
> that.  The pure java code was compiled and run command line.
>
> I don't believe for a second this is an issue with clojure, but to be
> honest I'm not clear where to start troubleshooting.
>
> What sort of things can I play with to figure out where the bottleneck
> is?
>
> Thanks.
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your 
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en



-- 
Venlig hilsen / Kind regards,
Christian Vest Hansen.

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to