Last Update: March 2005 |
OPEN SOURCE DATABASE SOFTWARE COMPARISON |
|
|
Ingres |
||||
Version |
Mysql-4.1.x |
PostgreSQL 8.x |
MaxDB Version 7.5 |
Firebird 1.5.x (Roadmap) |
Ingres R3 |
|
|||||
License |
Dual: GPL and Commercial |
BSD |
Dual: GPL and Commercial |
IDPL
& IPL |
CATOSL |
Platforms | Linux, Solaris, HP-UX, MacOs, AIX, SCO, IRIX, FreeBSD, NetBSD, OpenBSD, Windows, BSDI, DEC, OS/2, Compaq Tru64, Novell NetWare. | Linux, Solaris, HP-UX, AIX, IRIX, FreeBSD, OpenBSD, NetBSD, MacOs, SCO OpenServer, SCO Unixware, BeOS, BSDI, Compaq Tru64, QNX, Windows | Linux, Solaris, HP-UX, AIX, Windows | Linux, Solaris, freeBSD, HP-UX, MacOS, Windows | Linux, Solaris, HP-UX, AIX, Compaq Tru64,
OpenVMS Windows |
SQL standard compliance | Medium |
High |
|||
Speed |
? |
Medium/High |
Medium/High | ||
Stability |
Medium / High |
High |
|||
ACID compliant |
yes |
yes |
yes |
yes |
yes |
Data Integrity | yes |
yes |
yes |
yes |
|
Security features |
Medium |
? |
High |
||
Authentication methods supported |
SHA1 |
? |
none (under development) |
Host address, password and Kerberos | |
SSL support |
yes |
yes |
? |
plug-in |
? |
LOCKING and CONCURRENCY SUPPORT |
High |
High | |||
Views support |
yes (>=5.0, updateable views) |
yes |
yes |
yes |
yes |
Schemas support |
yes (>=5.0) |
yes |
yes (>=7.6) |
NO |
yes |
Subselects support |
yes
(>=5.0) |
yes |
yes |
yes |
yes |
Stored Procedures |
yes (>=5.0) |
yes (pl/pgSQL, pl/Perl, pl/TCL, pl/Python, pl/sh) |
yes |
yes |
yes |
Triggers support | yes (>=5.0, rudimentary) | yes | yes |
yes |
yes |
Unicode support |
yes ( >=4.1) |
yes |
yes |
yes |
yes |
XML support | ? |
yes |
|||
Programming Interfaces |
ODBC, JDBC, C/C++, .NET/Mono,
ADO.Net, OLEDB, Delphi,
Perl,
Python, PHP, Embedded (C precompiler), Embeded in Java (Connector/MXJ).
Entire server can be embedded as a library into an application |
ODBC, JDBC, C/C++, Embeded SQL (in C), Tcl/Tk, Perl, Python, PHP |
ODBC ,JDBC, C/C++, Precompiler (Embedded SQL), Perl, Python, PHP |
ODBC, JDBC, C/C++, PHP, Python, Perl,
Kylix, Delphi, .NET/Mono, ADO |
ODBC, JDBC, C/C++, .NET,
Perl, Python, PHP, Cobol, Fortran |
Alternative Table Type and Storage Engines |
Table types: InnoDB (default), MYISAM, BerkeleyDB, MERGE, Derived |
PostgreSQL has |
|
EVT (External virtual tables), procedural tables, updateable views, Derived Table(Planned Firebird 2.0) |
BTREE, ISAM, HASH, HEAP, HEAPSORT, PARTITION |
Transactions |
yes |
yes |
|||
Foreign Keys constraints |
yes |
yes |
yes |
||
Replication |
commercial plugin available |
yes |
|||
Load Balancing |
yes with MySQL Cluster (NDB storage engine) |
NO |
NO |
NO | yes |
Tablespaces |
yes |
yes |
no |
? |
no |
Ipv6 support |
NO |
yes |
? |
NO |
? |
Clustering |
yes |
NO |
NO |
NO |
yes |
Hot Backups |
yes |
yes |
yes |
||
Visual Administration Tools | yes |
yes |
yes (only windows) | yes |
yes (not
open source) |
Support 24/7 |
yes |
yes |
yes | yes |
COMMENTS:
- Mysql: MySQL
understands a
subset of SQL92 and some subset of the SQL99 syntax (union statement),
along with extra extensions such as the REPLACE statement and the LIMIT
clause for SELECT and DELETE. - PostgreSQL: Postgres understands a large subset of SQL2003 standard than MySQL. - MaxDB: SQL 92 entry level
with
several extensions, support outer joins and subselects. - Ingress:
entry level SQL92, several parts of Intermediate Level and some SQL99
|
|
Speed |
- MySQL is very fast on both simple and complex SELECTs, but might require changing the database type from MySQL/MyISAM to MySQL/InnoDB for UPDATE intense applications. MySQL handles connections very fast, thus making it suitable to use MySQL for Web - if you have hundreds of CGIs connecting/disconnecting all the time you'd like to avoid long startup procedures. As you can read from MySQL Homepage: "MySQL is generally much faster than PostgreSQL" - PostgreSQL: PostgreSQL is somewhat slow but has a lot of options for improving check Tunning PostgreSQL for performance. PostgreSQL forks on every incoming connection and the forking process and backend setup is a bit slow, but one can speed up PostgreSQL by coding things as stored procedures. |
ACID |
- ACID (an acronymn for Atomicity
Consistency
Isolation Durability) is a 'keyword' that business professionals
generally look for when evaluating databases. Frankly, non-ACID
databases aren't taken very seriously. |
- MysSQL has a much larger user base than PostgreSQL, therefore the code is more tested and has historically been more stable than PostgreSQL. MySQL is the much more used in production environments - MySQL has a lot of tweaking options. Random disconnects and core dumps are exceptionally rare. - PostgreSQL:
PostgreSQL 6.x
series
and earlier were dodgy. 7.0 series was a big improvement, 7.1 series is
very good. All incoming patches/improvements/suggestions are reviewed
by the core coders then accepted/rejected (mostly with recommendations
of changes/improvements) |
|
Data integrity |
- MySQL:
InnoDB/NDB storage engines have
transactions/rollbacks with savepoints. |
Security |
- Mysql: - PostgreSQL:
|
LOCKING and CONCURRENCY SUPPORT |
- Mysql:
- PostgreSQL: has a mechanism called MVCC (MultiVersion Concurrency Control), comparable or superior to best commercial databases. It can do row-level locking, can lock rows for writing in one session but give these rows unaffected in another session. - MaxDB:
row level support |
- MySQL:
you can read in mysql
homepage: "Stored procedures. This is currently not regarded to be very
important as stored procedures are not very standardized yet. Another
problem is that true stored procedures make it much harder for the
optimizer and in many cases the result is slower than before We will,
on the other hand, add a simple (atomic) update language that can be
used to write loops and such in the MySQL server. " Check: http://www.mysql.com/doc/M/i/Missing_Triggers.html |
|
Transactions | - MySQL:
-BerkeleyDB tables and InnoDB both
support transactions (version >= 3.23.* ) - MySQL Cluster (NDB) works with a 2-phase commit (XA is in progress) - InnoDB supports savepoints - PostgreSQL: since version 8.0. PostgreSQL also support Savepoints. Savepoints allow specific parts of a transaction to be aborted without affecting the remainder of the transaction. Prior releases had no such capability; there was no way to recover from a statement failure within a transaction except by aborting the whole transaction. This feature is valuable for application writers who require error recovery within a complex transaction. 2-phase commit are planned for version 8.1 - Firebird: including XA-compliant 2-phase commit protocol |
Foreign keys constrains |
- MySQL:
InnoDB tables support foreign keys constrains with cascading update and
delete |
Replication |
- MySQL:
"One way replication can be
used is
to increase both robustness and speed. For robustness two (or more)
systems can used to switch to a backup server if you have problems with
the master. The extra speed is achieved by sending part of the
non-updating queries to the replica server. Replication can also
benefit database backup operations. Live backups of the system can be
done on a slave instead of a master, eliminating potential problems and
possible downtime".Since version 4.1 replication can be done over SSL. - PostgreSQL:
there is no built-in replication support in PostgreSQL, but it supports
replication
features via: - MaxDB:
Only full table dump
and load,
but no online replication via log shipping or similar techniques |
Visual
administration tools |
- MySQL: MySQL
administrator - PostgreSQL:: PgAdmin III, see also http://techdocs.postgresql.org/guides/GUITools - MaxDB: DBMGUI (only available for windows). Web interface also available - Firebird: FlameRobin, see also http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_admin_tools - Ingress: Visual DBA [VDBA] not Open Source and only available for windows, included in binary distribution package (registration required) |
Platforms |
- PostgreSQL:
Since version 8.0 (January 2005) there is a Native binary
distribution for Windows |
- MySQL:
Yes. Any version. No
special maintenance required. |
|
Hot Backups |
- MySQL: - Using replication
is a very good method. - Filesystem snapshots (such as LVM) are also posible - MySQL Cluster ca take online backups - if all tables are InnoDB, simple selects on all desired tables - wrapped together in a sigle transaction- will also provide a fully consistent and non-locking (i.e. online) backup. - PostgreSQL: since version 8.0 (January 2005) PostgreSQL support a way to recover from disk faliure through Point-in-Time recovery (PiTR) that continuous backup of the server. You can recover either to the point of failure or to some transaction in the past. - Firebird: there is a new _incremental_ backup utility under development NBackup, planned for version 2.0 |
Schemas |
- PostgreSQL: schemas
allow users to create objects in separate
namespaces, so two people or applications can have tables with the same
name. There is also a public schema for shared tables. Table/index
creation can be restricted by removing permissions on the public
schema. |
Table type | - Firebird: a derived
table (not to be confused with "temporary tables")
is one that is created on-the-fly using the SELECT statement, and
referenced
just like a regular table or view. Derived tables exist in memory and
can only be referenced by the outer SELECT in which they are created. * SQL Standard: A derived table is a table derived directly or indirectly from one or more other tables by the evaluation of a |
Tablespaces |
1) By using tablespaces, an administrator can control the disk layout of an installation. This is useful in at least two ways. First, if the partition or volume on which the cluster was initialized runs out of space and cannot be extended, a tablespace can be created on a different partition and used until the system can be reconfigured. 2) Second, tablespaces allow an administrator to use knowledge
of the usage pattern of database objects to optimize performance. For
example, an index which is very heavily used can be placed on a very
fast, highly available disk, such as an expensive solid state device.
At the same time a table storing archived data which is rarely used or
not performance critical could be stored on a less expensive, slower
disk system. - MySQL starting from
version 4.1.1, you can store each - MaxDB: MaxDB do no use dedicated tablespaces. But if a volume is added, existing tables and indices will use that additional space. This means that 1) is applicable to MaxDB. 2) is no applicable as all volumes are considered of equal performance and the administrator cannot decide on which volume the pages for a specific table will be stored. - PostgreSQL since version 8.0 (January 2005) support Tablespaces |
License |
- Firebird:
New code modules added to Firebird are licensed under the Initial
Developer's Public License (IDPL).
The original modules
released by Inprise are licensed under the InterBase
Public License v.1.0. Both licences are modified versions of the Mozilla
Public License v.1.1 |
Other interesting Database comparisons |
- Linux-mag: Comparing Databases
-> http://www.linux-mag.com/2002-06/databbase_01.html - The Open Source Database Benchmark - http://www.mysql.com/information/benchmarkks.html - benchw (sourceforge) |
Feel free to send me your comments: 183771 |
|