[Zope] MySQL, PostgreSQL, etc

Richard Moon richard.moon@nec.ac.uk
Thu, 15 Feb 2001 12:39:04 +0000


>
>Message: 9
>Reply-To: <donald.braman@yale.edu>
>From: "Donald Braman" <donald.braman@yale.edu>
>To: <zope@zope.org>
>Date: Wed, 14 Feb 2001 14:08:53 -0500
>Subject: [Zope] MySQL, PostgreSQL, etc.
>
>Hello!
>
>I'm in a situation that I'm sure many are familiar with...choosing between
>MySQL or PostgreSQL. My main goals are stability under high load and ease of
>use. I don't need transactions. I know the standard comparison: MySQL is
>faster, simpler, and more popular, while PostgreSQL is slower but is more
>fully SQL standards based, handles transactions, etc. Are these generally
>accurate descriptions?

Stability under load - seems to favour PostgreSQL .

Ease of Use - not quite sure what you mean by that, but the features 
available in PostgreSQL make it easier to code SQL that does what you want 
it to. Features such as Unions and Subqueries help you get at your data 
easily, features such as Views, Triggers and Stored Procedures are used to 
make databases consistent and secure - which I guess makes them easier to use !

I've seen lots of discussions on this topic and the answer you get seems to 
depend entirely on the person you ask.

If you ask someone with experience of developing large apps using 
commercial databases they will say PostgreSQL. They find it amazing that 
anyone would contemplate serious database development without Unions, 
Subqueries, Views, Triggers and Stored Procedures. It's like going back ten 
years. Having said that the lack of OUTER (LEFT) joins in PostgreSQL is a 
pain, though of course there's a workaround

If you ask a web-developer then the apparent speed gain of MySQL apparently 
overrides all other considerations. However the latest release of 
PostgreSQL (7.1) appears to actually outperform MySQL, particularly in a 
high-load situation where inserts are being done on-line (MySQL's lack of 
row-level locking appears to be the problem here).

Take a look at this comparison
http://www.phpbuilder.com/columns/tim20001112.php3

I developed a Zope-based project using PostgreSQL originally but I migrated 
it to MySQL because my host providers (those excellent people at NIP) were 
only supporting MySQL. Since my project (www.tunedb.org) didn't have any 
transactions involving money or real things (like stock) then the loss of 
transactions was not a major problem.

Of course all limitations _can_ be worked around and I found workarounds 
for the missing Unions and Subqueries though it was a real pain.

The 7. 1 release of PostgreSQL seems to address the performance issue so  I 
can't see any reason to use MySQL if you have a free choice.

>I'm wondering what people who have used either (or both!) think about using
>these (or other databases) in conjunction with Zope. Are there any special
>cases where one or the other works better or worse with Zope?

In terms of use with Zope - I found no practical difference. Both work 
extremely well.

The only issue I had with MySQL is that I developed my application using 
the latest available version at the time, then implemented it at NIP on a 
slightly earlier release and I found a couple of important differences to 
the product. If you are looking for external hosting make sure you use the 
same version as your external hosts - MySQL in particular seems to 
introduce major changes in minor releases.

When I migrated I often had to workaround the limitations of MySQL so I 
left the ZSQL Method code there and used a variable to hold the type of 
database being used. So, where there is a difference I have <dtml-if 
"dbtype=='mysql'"> Mysql code <dtml-else> Postgres code </dtml-if> so that 
I can generate the correct SQL depending on the database being used. I 
don't know of a way to change the database connection programmatically, so 
to actually make the change you would have to go and change all the 
connections in all the ZSQL Method - not a huge task.

Richard Moon