> > I would just like to note that speed and reliability are largely > dependent on the transaction profile of your application. If your > application is read heavy, MySQL is a sound choice. However if your > application consists mostly of database writes, PostgreSQL's MVCC [1] > architecture and row-level locking capabilities will generally provide > superior performance and reliability to MySQL.
The InnoDB tabletype, which is the only tabletype that should be used for storing real data when doing enterprise-level work, provides row-level locking and complete ACID transactions. InnoDB also provides MVCC architecture. As for strength ... Oracle just bought the company that owns the InnoDB table type. If it wasn't good, Oracle wouldn't have bought it. A quick primer for those who don't know MySQL from a DBA's perspective: There are four primary tabletypes - MyISAM, InnoDB, Heap, and NDB. (There are others, but you won't use them.) * The default is MyISAM, which is non-transactional, but extremely fast. It requires table-level locks for concurrency, but you're not going to use it if you need concurrency. This is the tabletype that provides MySQL with its reputation for blazing-fast reads. * Heap tables are temporary in-memory. These guys are even faster than MyISAM tables, but with no permanency. They also do not provide any sort of transaction capabilities. * InnoDB tables are the enterprise tabletype. They provide complete ACID, foreign keys, and use MVCC. Because of this, they are slower than MyISAM or Heap tables. Whenever I design an app that uses MySQL tables, about 90% of them are InnoDB. The rest are MyISAM (for things like sessions and logs - items that never have concurrency issues). * NDB tables are MySQL's clustering table type. They provide complete ACID and MVCC architecture. Because of these options, I can tune my tables according to my need. Not everything requires ACID or MVCC. Those are features that have a performance cost. But, the nice thing is that I can do a query against tables that have different tabletypes. So, I can query a MyISAM joined to a InnoDB, if I wanted. Hopefully this will reduce the FUD. Rob