Open Source Databases Comparison
The following table describes the comparison between several open source databases. The comparison will cover: HSQLDB, H2, PostgresSQL, MySQL, Derby in terms of their limitations and strength. This analysis could help to select database for our project.
|
PostgreSQL 8.2 |
MySQL 5.0 |
Apache Derby 10.3 |
HSQLDB 1.8 |
H2 |
---|---|---|---|---|---|
OS support |
First windows supported version, only support linux and windows, special compilation requires for other platforms |
Supports Windows/Linux/Unix/Mac OSX |
Any OS that can run Java |
Any OS that can run Java |
Any OS that can run Java |
Documentation |
Full pre and post installation documentations |
Extensive pre and post installation documentations |
Extensive pre and post installation documentations |
Full pre and post installation documentations |
Extensive pre and post installation documentations |
License |
BSD License - Free |
Depends - GPL for open source or Commercial for commercial |
Apache License v2 - Free |
BSD License - Free |
Modified MPL - Free |
Maximum Database Size |
Unlimited |
Unlimited |
Unlimited |
Unlimited (depends on memory) |
Unlimited (depends on memory) |
Maximum Number of Tables |
Unlimited |
Unlimited |
Unlimited |
Unlimited (depends on memory) |
Unlimited (depends on memory) |
Maximum Table Size |
32 TB |
64 TB |
Unlimited |
8 GB |
? |
Maximum Row Size |
1.6 TB |
8 kB |
Unlimited |
Unlimited (depends on memory) |
? |
Maximum Field Size |
1 GB |
255 B |
2 GB |
Unlimited (depends on memory) |
? |
Maximum Rows per Table |
Unlimited |
Unlimited (Limited by tablespace of 64TB) |
Unlimited |
Unlimited (depends on memory) |
Unlimited (depends on memory) |
Maximum Columns per Table |
250 - 1600 depending on column types |
1000 columns |
1012 columns |
Unlimited (depends on memory) |
Unlimited (depends on memory) |
Maximum Indexes per Table |
Unlimited |
64 indexes |
32767 indexes |
Unlimited (depends on memory) |
Unlimited (depends on memory) |
Indexes |
32 fields - B-Tree, R-Tree, GiST, and Hash |
16 fields - B-Tree |
16 fields |
? |
? |
Interfaces |
ODBC, JDBC, C, etc. |
ODBC, JDBC, C, etc. |
JDBC |
JDBC |
JDBC |
Transactional |
ACID-compliant |
InnoDB type tables only - ACID-compliant |
Yes |
? |
Yes |
Bind Variables |
Yes |
Yes |
Yes |
? |
? |
Stored Procedures |
Yes - SQL, PL/Tcl, PL/pgSQL |
Yes |
Yes |
Yes |
Yes |
Trigger |
Yes - SQL, PL/Tcl, PL/pgSQL |
Yes |
Yes |
Yes |
Yes |
Row Level Locking |
Yes |
Yes |
Yes |
? |
Yes |
Timeout |
Yes |
No |
Yes - deadlock detection and timeout |
Yes |
Yes |
Error Code |
Yes |
Yes |
Yes |
Yes |
Yes |
Date Time |
Broad range of date/time formats |
Broad range of date/time formats |
Broad range of date/time formats |
Broad range of date/time formats |
Broad range of date/time formats |
Scalability/SMP |
Each connection uses one CPU, but spread the processes of different connections across available CPUs |
SMP is supported by using OS threads. All connections are executed in one thread, queries are not using multiple CPUs |
Yes, embedded engine does all work in client threads |
Multithread listener, but execute queries one at a time |
|
Load Balancing |
Select queries are distributed among the master and slave servers in random manner. Other queries are executed on master and replicated to slaves |
MySQL clusters - handle transactions in a round robin manner |
N/A |
N/A |
N/A |
Replication |
Slony1 replication solution, not core |
Master-Slave replication and Chained replication |
Master-Slave replication with manual fail-over |
N/A |
N/A |
Online Backup |
Write-ahead log and PostgreSQL point-in-time recovery, also Hot Standby System |
Online Backup with Mysqldump, InnoDB Hot Backup (commercial add-on), MySQL Clusters commited log |
Yes - Online backup utility |
Yes - backup manually data files and redo logs |
Yes - built-in tool |
Cluster |
PGCluster |
in-memory, shared-nothing, replicatied to 4 replicas. If 1 node fails, currenct transaction fails even all other nodes survive |
N/A |
N/A |
Yes? |
Ease of Embedding in Java-based Application |
Needs a lot of customizations |
Can use MySQL Embedded |
Almost no customization requires |
Almost no customization requires |
Almost no customization requires, and run as server after embedded |