Editorial Note: This is a republish, in memory of Mike who passed away too soon. You can see his memorial at sqlmemorial.org.
Recently I have been working with a colleague who is doing a bit of a side projects outside of work. He's trying to expand his skillset using a pet project at home. I encouraged him to look at NoSQL, in particular MongoDB. While I'm a traditional 3rd Normal Form relational developer, I still think there is value in NoSQL. We had CSV files in the past, and we got past that phase, but let's not rule out all the new toys.
But while trying to convince other colleagues to adopt other database technologies, I started reading some of the documentation provided and found some comments that made me realise why us traditional DBAs get a bit uncomfortable around NoSQL. From the documentation, I picked out all of the quotes that really made me think that there were a few misconceptions about how SQL Server was bad compared to NoSQL. To see the original transcript, have a quick peek at: https://www.mongodb.com/NoSQL-explained.
There are some really good points in there , but these are the ones that irked me.
The first one I hit was the fact that "NoSQL is better for Agile. with quick schema iterations and frequent code pushes".
As far as I can see, SQL Server can also do these things. It's just up to the development team to implement them. I really can't see how ALTER TABLE is a real bottleneck
The second one I hit.
Object orientated programming is easier with NoSQL.
I'm sorry, I can't see this one. If your data design is correct, then your classes in C# will map nicely to your data design.
"If you need to add a column to a table, in SQL you have to migrate the entire database to the new schema."
I'm pretty sure ALTER TABLE is again not going to require a complete database rebuild
" Unlike relational databases, NoSQL databases generally have no requirement for separate applications or expensive add-ons to implement replication."
This one really annoyed me. I'm pretty sure mirroring, log shipping, replication and clustering are all included in the box. I'm not sure where the perception of "expensive" add-on has come from.
Oh boy... this is where I nearly screamed at my laptop. This is a direct quote from the Mongo DB web site: "Structure and data types are fixed in advance. To store information about a new data item, the entire database must be altered, during which time the database must be taken offline"
I'm pretty sure CREATE TABLE statements never took a database offline for me. Unless I'm doing it wrong.
I like NoSQL. It works amazingly for huge amounts of data that I don't need to use in a relational manner. I've used it for databases with more than 1 Trillion rows.
What I don't like is that there is a lot of miscommunication about where and when you could use either solution. It seems very much like a football (soccer) match, Each team hates the other without any valid reason.
I'm very disappointed in MongoDB in how they have put a negative slant on relational databases rather than show us how to make great hybrid solutions.