When I first started using Mini SQL (mSQL) I didn't think much of it. It was lacking all but the most basic of features, and got slow with anything more than a few thousand records in it. Then I ran into MySQL and eventually PostgreSQL.
I found the power, speed, and flexibility of both databases to be tremendous. MySQL tested faster than PostgreSQL, but only by a little. And to PostgreSQL's defense, it had quite a few features that MySQL didn't have. (MySQL is slowly starting to catch up in features.) Both have served me well in the past few years.
Now, after many years of working almost exclusively with PostgreSQL and MySQL, I find myself working on Oracle once again. (I work for a company that manufactures an open source CMS called WebGUI.) We've decided to support many commercial databases in addition to the open source databases. Naturally our first choice was to go after the biggest -- Oracle 8i and 9i.
I remembered Oracle with fondness since it was one of the first databases I ever worked with. But now, to more experienced eyes, Oracle is the nightmare that haunts me as I sleep. And it is the thorn in my side while I am awake.
I'm a realist. I know that database manufacturers have to keep adding features to their products in order to sell more products. I know that they sometimes need to extend standards in order to accomplish the goals of their products. But I am sick of over-bloated database software. And I'm even more sick of how commercial vendors like Oracle and Microsoft have bastardized the standards.
Just over a month ago I downloaded both the Windows and Linux versions of Oracle to play with them on my two development workstations (one Windows XP and one Red Hat 7.3). For those of you who don't know, the Oracle 9i database is now on THREE full CDs. It took me one full day just to download the CDs (Oracle was apparently having problems with their site). It then took another couple of days just to get set up with a couple of databases for testing. Not to gloat, but I'm a pretty decent tech-head and it hasn't taken me three days to install anything in years. It didn't take even one day to download, compile, install, and configure either PostgreSQL or MySQL.
I then decided to install the Oracle client on one of our test web servers (it was required for the Perl DBI driver to work). First let me state that Oracle required X Windows, which we didn't have on our web servers, because they are servers and don't need the wasted overhead. So I had to install X Windows. It also required its own user for the client. Why? Don’t ask me. Its just a client. Once I finally got the installer running, I checked that I only wanted to install the client, and not the database. The client turned out to be almost 1 gigabyte! Now, I'm sure that I could have selected some sort of advanced install that would have installed just the libraries I needed, but the Perl driver said to install the client, so I did. One gigabyte plus one more day wasted.
The next day I started testing our CMS with Oracle. Many features worked right out of the gate. (We worked hard to stick to the ANSI SQL standards to make porting to other databases as easy as possible.) I then started testing some of the features that used more complex SQL, like LEFT OUTER JOIN. To my dismay Oracle didn't support such a basic feature. Don't get me wrong; it does have a way to do outer joins, but not using the ANSI SQL standards. The thing that I found even more frustrating was that the LEFT OUTER JOIN syntax has been in the ANSI SQL standards since 1992 -- more than enough time for Oracle to adopt it or at least provide an overlay interface for the standard.
Left Outer Join Syntax:
ANSI SQL = LEFT [OUTER] JOIN
MySQL = LEFT [OUTER] JOIN
PostgreSQL = LEFT [OUTER] JOIN
Oracle = table1.column(+) = table2.column
MSSQL = table1.column *= table2.column
The bastardization of the ANSI SQL standard doesn't end there with either database, but I hate beating a dead horse. Suffice it to say that either Microsoft and Oracle engineers are stupid (which I don't believe) or someone got it in their head that if they mutate the standard just enough they'd be able to make it difficult for their customers to move away from them.
Now some of you are going to say, "Why don't you use a translating abstraction layer like ODBC or JDBC?" The point is that I shouldn't have to. My team and I stuck to the standards for a reason: Portability with no sacrifices. For the reasons listed above, we're now considering dropping support for Non-ANSI SQL compliant databases.
After 10 years of working with most of the major commercial and open source databases, I'm sad to report that I cannot say, "Look how for we've come." Instead, I have to report, "Look how far away from the standards we've come."
I've come to the realization that these two open source databases (PostgreSQL and MySQL), with less than 1/1000 the funding of the commercial databases, are actually better than any of the commercial databases. Sure the commercial vendors have more features, but for the most part they are features I don't need. And I would guess that most developers and businesses don't either.
I'm sticking with MySQL and PostgreSQL, and will look at commercial databases as inferior from this day forward.
That's my two cents. What's yours?
Note: Comments are owned by the poster. We are not responsible for their content.
I use Postgresql to replicate an HP3000 imageSQL multiple databases that have millions of records.
I need to do this VERY BADLY!!!! Can you give me a brief description of your setup? I'd love to talk to you about this...
Your problem is that you chose the wrong Free Software database. Not that MySQL is a bad choice, but the MySQL developers have typically aimed more for raw select speed and not for advanced features. PostgreSQL has triggers, functions (with several different programming languages supported including C, Perl, Python, Tcl, and SQL), a mutable type system, rules, MVCC, referential integrity, and a whole pile of other goodies. The new beta adds to that schemas, and a whole pile of other goodies.
What PostgreSQL lacks is point in time recovery (you can only do full backups not incremental ones), and the best replication strategy is commercial, but other than that PostgreSQL is a pretty slick deal.
For Instance Postgres doesn't support OUTER JOIN
Hmmm,
Think I could post my previous message as a reply to yours.
Have you noticed the fsync=true setting for Pg?
As for Mysql...many web sites and companies have their "enterprise" data in it. Why? - It meets their needs - end of story.
Not everyone (in fact hardly anyone) needs all the features that Oracle provdies...but you have to pay for them.
Dont believe everything that th big O tells you.
If more DBA's think like me, then yes - proprietary database advocates are in trouble !
regards
Mark
Both PostgreSQL and MySQL need clustering support if they ever want to compete with Oracle and MSSQL in the Enterprise world. But maybe they don't need to compete with the big boys. The point of my article was that many people/companies simply don't need a high availability database. As long as they have some sort of replication and backup mechansim, most companies are satisfied. Both MySQL and Pg have methods for doing these things.
With the exception of the Fortune 1000, most companies can't afford $300,000 worth of hardware to cluster across anyway, let alone the licensing fees of Oracle. At least MSSQL is a little less expensive than Oracle (last time I checked). Not only that, but they don't have the money to hire a full time DBA either. In most cases their lowly Network Technician, Systems Administrator, or Developer get's stuck with that role.
As for other features, I'd love to see *full compliance* with the latest ANSI SQL standards on both databases. They're most of the way there, but some of the more less frequently used items are missing.
As for stored procedures, triggers, and the like. I have no use for them. I develop database agnostic applications, and those kinds of sub-systems are always database specific.
off_topic_rant {
My article isn't speaking to the hundreds of billion dollar companies out there, and their needs. They have the money to do pretty much anything they like. It was speaking to the thousands (and perhaps millions) of small businesses around the world that actually drive the economy.
Your comment "in 15 years Mysql many not be free..etc.." is significant - The GPL that covers Mysql (and all other GNU software) ensures exactly that.
Its worth going to www.gnu.org and reading about this very issue
best wishes
Mark
And isn't it a little silly to talk about MySQL's "support" of joins? So the query language has an elegant JOIN operator. The query is still implemented using a primitive ISAM mechanism that exacts a nasty performance hit on complex queries. If I have to choose between elegance in the language interpreter and performance in the actual database engine, guess which one I'll choose?
test1:
have user 1 update a single row of a table (without committing)
have user 2 update a separate row of the same table.
If user 2 waits for user 1 to commit, then the dbms is not a multi-user database and will not scale.
test2:
while the database is up and open, make a backup that can be used to restore the database to the exact state it was in when the backup finished.
If you can not successfully accomplish this task, then the dbms can not be used in a 24/7 environment.
Why I prefer Open Source databases
Posted by: Anonymous Coward on September 16, 2002 07:20 PMThe only thing I really miss in PostgreSQL is
a decent way of replication. Other than that,
the oss RDBMS'es are the way to go.
#