One of the most common questions non-users ask is “Why should I use MongoDB?”
There are a bunch of fancy answers: you can scale it (webscale!), you can use it for MapReduce, you can store files in it. Those things are all true, but every database worth its salt can scale (there are MySQL clusters with tens of thousands of nodes), every new-ish database I know of supports MapReduce, and filesystems are pretty good at storing files.
I think the reason is much simpler:
MongoDB gets out of your way.
For example, a user (on IRC) asked, “How do I store a form’s data in MongoDB?” Based on the question, I assumed he was using PHP, so I pasted the following three lines:
$m = new Mongo(); $m->test->formResults->insert($_POST); print_r($m->test->formResults->findOne());
“Hey, it works!” he said.
(For those of you not familiar with MongoDB (or PHP), this stores and retrieves everything in the POST request and can be run with no prior database setup.*)
So, all of the bells and whistles are nice, but I think the real benefit is the simplicity. MongoDB is the scripting language of databases: you can just get stuff done, fast.
In this spirit, 10gen’s first monthly blogging contest topic was to write about something you developed quickly using MongoDB. The entries were cool: people built really interesting applications ridiculously fast.
Some of my favorites entries were:
- BugRocket’s Rapid(-ish) Development
Ryan Funduk wrote about creating a bug tracker.
“Without MongoDB, I would have easily racked up over a thousand database migrations.”
- The Birth of Mojology
Gergely Nagy built an open source application for viewing and doing statistics on syslog messages.
“About four hours [after installing MongoDB], I posted the first version of my mongodb destination driver to the syslog-ng mailing list.”
- From 0 to 1 Million in 6 Hours
Bradley Grzesiak wrote about programming VoiceRally.
“Friday, the day after VoiceRally was written, we sent over 1.5 million WebSocket messages.”
- Family Spoon and MongoDB
Tom Maiaroto writes about creating a recipe website.
“Yes, you need to be aware of “schema” and you can’t go hog wild, but you also get more forgiveness and MongoDB works with you to solve your problems. It’s very flexible. It’s not something that you need to work around, it’s something that you get to work with. Anytime that you have a situation like that as a developer, your day is going to be much more happy and productive.”
Check out the other entries, as well. It’s too bad we can only choose one to win!
This month, we’re asking people to write about an open source app using MongoDB and the prize is an iPad2!
Edited to add: some of the commenters are upset about my advice to store
$_POST in MongoDB. You should not store any user input unsanitized. For people familiar with SQL, the code above does not allow a traditional injection attack with MongoDB (as it would with SQL). After the first flush of success, I told the guy to not do it this way and to go read the documentation. Inserting
$_POST was a learning tool, not a solution, and I tried to make that clear over IRC, if not in this post.