MSSQL Express, MySQL, or db4o?

In designing my first scalable, flashy, performant (yes, I'll use this word I guess) internet app, I spent quite a bit of time in the database exploration realm, which really comes down to one question on a no-budget venture like I'm beginning with: open source or free?

Deciding on a database for a web app is like deciding on the materials for the building you're designing - mui importante. When I took a database class in graduate school (nope, didn't know much about them until then), we exclusively used MySQL with a C API, while developing (supposedly) on a Linux platform। We weren't even allowed to use C++ and I still think my professor believes that C is better than C++ in every way...but I digress। Knowing of the ridiculous (yes, ridiculous because I have used them extensively) debuggers available on Linux (clunky, buggy, slow, incompatible with various g++ compilation types, etc.), I decided to develop my programs on Windows using VS2003 (with a free academic license), keeping them gcc compatible. VS2005 wouldn't work with the C API b/c of some type conflicts, but VS2003 worked just fine.

Anyways, my development time was very fast and I finished far ahead of my peers, mostly I think b/c of my choice of development platform rather than any special coding ninja skills I possess. During that process, I learned that MySQL was painstakingly slow on Windows compared to the same code running on Linux, almost by a factor of 10. Populating search engine-like tables in my db running on Windows would take several minutes, compared to 1 - 2 seconds on Linux.

All of this background is to provide a more intelligent decision-making process to the question above: free (MSSQL Express) or open source (MySQL)? If I go open source and MySQL (and I must say I prefer the enhanced SQL language implementation in MySQL over MSSQL - no MINUS in MSSQL?? come on...that's just lazy), I would need to have two server boxes (one Windows and one Linux) or a Linux VM because my app will be using some of the latest and greatest technologies like LINQ, WCF, and Silverlight on ASP.NET in C#.

I tried out a VM using VMWare, and it worked beautifully, but then I began to think about the administrative overhead this could easily incur down the road...and it wasn't so appealing. Plus the possible layers of debug involved in a database connection over VM or another box...ugh. As Steve Mcconnell points out in his most excellent book Code Complete 2, the number one imperative of software design is to effectively manage complexity. This seemed to unnecessarily introduce complexity that could easily come back to bite me.

I also looked into OO DBMS's...meaning I looked at the free one - db4o. It was very appealing as well since it could be utilized and manipulated natively in C# and was object oriented, but the LINQ connector for it was brand new and it wasn't widely used or supported (at least it seemed to me), so I bagged it. Maybe later... ORM instead then using LINQ. Then I came back to the idea of MSSQL Express, which I had originally dismissed b/c the db is limited to 4GB. Then I thought, "4GB? That's huge!". If we exceed that size, then my website is doing very well and making some money, so we should have enough capital to afford the full upgrade, or work out some hacked db scaling scheme at the very least to continue with MSSQL Express.

So, after a couple months investigation, I came back to an old addage that comes up again....and again...and again in software: you get what other people are paid for. I know MySQL employees do not work for free, but no one has the resources and built-in best practices that Microsoft does to crank out quality software.

As Microsoft no doubt views the Express investment as a type of future binding to its users to one day use the full-blown version, I consider using the Express version as my downpayment on a very good database that I'll probably have to pay for...someday. And, I can easily choose to have a single, integrated platform or a mult-tiered system at any time.

Comments

Popular posts from this blog

35x Improved T-SQL LevenShtein Distance Algorithm...at a cost

The hidden workings of __doPostBack - Full or Partial Postback?

Facing Death...dum de dum dum