« Sponsored Post: deviantART, Okta, CloudSigma, ManageEngine, Site24x7 | Main | Hot Scalability Links For Sep 3, 2010 »

Hilarious Video: Relational Database vs NoSQL Fanbois

This is so funny I laughed until I cried! Definitely NSFW. OMG it's hilarious, but it's also not a bad overview of the issues. Especially loved: You read the latest post on HighScalability.com and think you are a f*cking Google and architect and parrot slogans like Web Scale and Sharding but you have no idea what the f*ck you are talking about. There are so many more gems like that.

Thanks to Alex Popescu for posting this on MongoDB is Web Scale. Whoever made this deserves a Webby.

Reader Comments (49)


CREATE TABLE table1a (number float);
INSERT INTO table1a VALUES (19.54);
SELECT * FROM table1a;

=> 19.54

Knowing how to use the tools properly is just one difference between a handyman and journeyman.

September 8, 2010 | Unregistered CommenterErik

Let me guess, the Mongo kid's name is Little Bobby Tables.


September 8, 2010 | Unregistered CommenterTodd Smith


MySQL supports the concept of SQL_MODE. By default it is forgiving about data entry mistakes for historical reasons, but you can enable SQL_MODE=STRICT_ALL_TABLES in order to avoid the introduction of bad data through a poorly coded application that inserts decimal data into an integer field.

Then again, you picked MyISAM for your storage engine, and this engine is not transactional, nor crash safe, so you are just as fscked when you write data to it as when you write to MongoDB.

So of course, you'll want to use InnoDB. InnoDB is always crash safe, and can be 100% durable (innodb_flush_log_at_trx_commit=1) or you can make it less durable. You'll be even happier to know that the InnoDB plugin includes an option which enforces STRICT_TRANS_TABLES even when the appropriate SQL_MODE is not set.

Now you can properly configure your MySQL server, but I guess your loins won't be quivering so frequently.

September 9, 2010 | Unregistered CommenterSwany

Garrett Smith deserves the credit for this. He spent quite a bit of time on this and has produced two more and is working on a 4th. If you will be in Chicago the 23rd and 24th of Oct you can see him present on Erlang at the ErlangCamp conference. I am looking forward to his fourth installment.

September 9, 2010 | Unregistered CommenterMartin Logan

I got annoyed with the idea that MySQL was somehow the poster child of databases, so I struck back: MySQL is a database (parody video).

September 9, 2010 | Unregistered CommenterNigel McNie

Really funny, but too unrealistic!

The yellow dog is not an "relational database fan" by any stretch, he's just a professional who knows his shit (the other is a troll). In real life, old-timers are still claiming that anything but Oracle or ("or" because they're mutually exclusive) SQL Server can't handle the job. MySQL, PostgreSQL, Memcached, Hadoop, noSQL crap, everything is lumped into a "non professional" tool and they don't bother. Google's MapReduce/Bigtable or Amazon's Dynamo only works "because they have a PHD designing that database". A bunch of 1950s-style rethoric, if you ask me.

Not an attack on anyone, but LOTS of people on our industry still think that "right tool for the job" means "anything but open source".

September 10, 2010 | Unregistered CommenterMdGee

Two thumbs on the video! This actually inspired me to make a related video about an everyday IT conversation I seem to keep having. I'm more on the system admin side of things, so mine is slightly different.

September 10, 2010 | Unregistered CommenterKeith W.

Pretty good Keith! It goes without saying it's NSFW.

September 10, 2010 | Registered CommenterTodd Hoff

Best of all: if you want high performance write to /dev/null

I do agree with the comment about choosing the right tool for the job. Lookup tables are perfect for many data problems. But they are not the same as a relational database, which is right for complicated data problems.

What pisses me off is that right now, the HTML5 spec is wavering between using key-value lookups vs. a SQL DB (e.g. SQLite) for client-side persistent storage, and the same boneheads that believe one or the other is always better are the ones making this critical decision. Someone on the mozilla forum did an example "join" between two key-value tables in JavaScript -- it took about 20 lines, and didn't even have any exception handling.

Sure, SQL is the most arcane, unintuitive, bass-ackwards language out there, and you actually have to be smart and experienced to use it well, and that takes work, and it's still a PITA. But it solves a very, very hard problem. Comparing SQL DBs to hashes is just wrong.

I'll stop venting now.

September 21, 2010 | Unregistered CommenterTom Harrison

Does DevNull support sharding? I died right there

October 12, 2010 | Unregistered CommenterSteve Tran

Interesting comments... as for the "Old Programmers" and "Old Tools"... two words: Mainframe & COBOL. Back in the 80's we (us Old Programmers) heard how both of these dinosaurs were dead. The push was to move to 4th GL's and smaller computers. Well there have been many changes over the years but Mainframes and COBOL are still used by almost every large company. I know because I've contracted to them for the past 30 years.

October 14, 2010 | Unregistered Commenterslebi

jaja lol was very funny, im really like it :)

October 17, 2010 | Unregistered Commentergodie

Katherine Lee: are you serious??? You have absolutely no leg to stand on with your argument. Your table definition specifically casts your data as an INT. Not sure if you are aware of this but a double or floating point number is *not* a whole number and therefore mysql in this instance is just doing what you *told* it to do. You instructed it to store the data in whole form and that isn't being mishandled in anyway. In this particular context the problem is clearly PEBCAK. Allow me to demonstrate with the language on which EVERYTHING is built upon, C:

#include <stdlib.h>
#include <stdio.h>

int main() {
int foo;

foo = 2.45;

printf("%d\n", foo);

return 0;

Now compile it:

gcc -o katherineleeisafool test.c

Now run it:

$ ./katherineleeisafool

And yes I know that "%d" is the interpolation indicator for an int but if you try to print that as a float you will find it won't compile. Now ask yourself why...

Wait for it....
Almost there...

Perhaps it may be because when I told the program how to store the freaking number, I told it to store it as an *INT*.

December 2, 2010 | Unregistered Commenterimsplitbit

Isn't it amusing that Nigel doesn't see the irony in posting a postgres fanboi video in the comments of a post with a video mocking fanbois???

Hey Nigel, keep an open mind man. The smaller your toolset the less inspiring work you will do.

December 2, 2010 | Unregistered Commenterimsplitbit

If you try hard enough, you can misread anything you like into it.

I've used both MySQL and Postgres for several years. My toolset isn't constrained to the things I like.

And I don't see how "open mind" comes into it. Open minds absorb any old rubbish. Critical thinking skills, the ability to evaluate options - far more valuable.

December 2, 2010 | Unregistered CommenterNigel McNie

Critical thinking... ROFL. Are you also synergizing best of breed technologies whilst shifting paradigms? What I meant was that you should work harder at understanding that every tool has it's place. After 15 years I have learned that there is no one technology that is best at everything and therefore you need to use the right tool for the right job.

There is a reason MySQL is the defacto standard on the web certainly isn't because they implemented a free oracle. It is because they addressed some critical issues early on. They realized that most people didn't care as much about stored procedures and triggers so much as speed and some form of vendor supported replication. Don't mistake me for claiming that it did either perfectly, but it did address those needs. Additionally they made it dumb person compatible so the barrier of entry was lower. Again, not saying that was the best thing to do yet they did come out ahead in total number of deployments.

To me an RDBMS is an RDBMS. I can use them all efficiently so I really don't care what I use as long as it is the best tool for my project.

Anyway, I know that I am not the only one who interpreted your video as a fanboi video as I had no less than 4 people here at work send me the link and say something to the effect of "Oh god, here come the postgres lovers". Open mindedness is not a weakness and the fact you fail to see it only demonstrates how you haven't yet matured enough to know that.

December 3, 2010 | Unregistered Commenterimsplitbit

Personally I can see a use for document databases. I certainly wouldn't want to trust them for seriously important information or mission critical information.. prove it too me I can trust them (No not the marketing guff)

I guess I would want to really know that if my app or software became 'disastrously' successful that the database would continue to function and not screw up writes or loose data. I don't want it hacked and used as a way of spreading malware via my site

I want to know that if there is a train wreck I can roll back. I also know that even highly mature enterprise grade RDMS have gotchas and flaws so I expect that Mongo and it's ilk have too it's just software. I don't wanna get sued (Or exiled to the rural existence eluded to in the video! ) so I will wait for the war stories from the early adopters to be posted online..

Good luck and remeber.."It's a database Jim, but not as we know it !"

April 6, 2011 | Unregistered CommenterGus

The problem here is that they are arguing Mongo vs. MySQL. Mongo is kind of a piece of shit when it comes to data consistency and protection of writes etc.

Now, if they were having a real conversation about the proper use of a SQL-based DB (like for a not highly concurrent user or less write-intensive app that needed ad hoc reporting like an ERP system or CRM) then yes this guy is right on in schooling the Mongo-tard.

However, for modern, write-intensive web apps. social gaming, the next facebook, super hi volume transactional systems etc. - then yes, MySQL is the piece of shot and true distributed data platforms like Riak make more sense from both a reliability and scalability perspective.

Just my $.02

April 19, 2011 | Unregistered CommenterMartin

Loved that! As a humble Access developer, it still cracked me up. I have a lot of similar discussions albeit on different issues...not scalability! ;-)

Paul Harrold Access developer

May 9, 2012 | Unregistered CommenterPaul Harrold

so, there are people out there who try to store float fields into an int and who are then surprised it gets rounded? Perhaps I'd better srart working on a farm too.

November 25, 2012 | Unregistered CommenterErik

HI, I cannot see the video.

September 4, 2013 | Unregistered CommenterKen Fellows

Embedded player is dead, but I think I found the video at http://www.youtube.com/watch?v=R1yhNDb1Th8

January 4, 2014 | Unregistered Commenterdmadisetti

Why the fuck is this video "private" on YouTube, and no longer available here on the site?

February 12, 2015 | Unregistered CommenterYour Mom

SO RACIST?? whiteboy fantasy running down a little brown/asia boy!

I really have a problem when you mix intellectual discussion with undertone of flat out racism and almost everyone willing ignores it. This is the sudo racism so prevalent with valley. I ain't buying this one. There are many more funny ways to debate this topic that actually is rather deeper.

who is the author is this stupidly shot video? Why would such a good blog highlight it?

Go work in Asia/China - you will see - the scale some of the Chinese Asian businesses are now dealing with is teaching them more then you dreamed of in your little white wonderland. Time are changing buddy. Wake up.

And no - I am not Chinese. I just have first-hand experience with working with internet scale there - circa 2016+

April 30, 2018 | Unregistered CommenterJason

PostPost a New Comment

Enter your information below to add a new comment.
Author Email (optional):
Author URL (optional):
Some HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>