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  | 
      
    
  

