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 |