Following a comment from Alexandre on a previous post, I included SQLite in my performance test of database engines running under Java.
What prevented me from using SQLite in the previous test is that it’s not a pure Java database and one have to use third-party JDBC driver and implementation classes in order to manage this database engine. IMHO, I also dislike another fact: SQLite does not enforce data type constraints (and it’s a feature, not a bug) so everything is stored as ASCII string, even if you have very few other “artificial” data types.
In order to include SQLite in my test, I have to rely on a third-party libraries: David Crawshaw’s JDBC driver for SQLite. Some minor adaptations also had to be done to the code (see the SqliteTest class in the source code below). Brandon T. provides a good tutorial on how to use this driver on MS-Windows here.
The result? SQLite performances are worst than Derby! In this case, the slowest step is the data insertion: more than 11s for 100 insertions (see graph below). The database creation step is also slower than with H2 or HSQL (but much faster than Derby). If you compare the whole process (initialisation + creation + insertion + retrieval), SQLite (and its JDBC driver) is the worst database engine. The only good point is that it only creates one file (the other engines creates at least 2 files) and this file is only 5kb.
Click to show the normal size graph.
A graph with a log y-axis is available here
Protocol. Same as in the previous post except that now I have 4 engines to rotate. Source code is here (4kb) and the jar file + libraries is here (5Mb).
2 thoughts on “SQLite+JDBC, worst than Derby!”
Thanks a lot for the tests. As I’m not a regular user of Java, I’m wondering if using the time’System libraries to profile the application is the standard way under Java. There are no built-in profiling libraries/classes ? Another small question, would it possible to run the test with an increasing number of insertion ? (that’s often giving a more realistic view of how behave the underlying buffering/commit) what about transaction mechanisms ? are the results different with transaction ? Sorry to bother you about it but I think your idea of a small benchmark for small “datastore” engine is very good.
Comments are closed.