What makes something a NoSQL data store? What are the quintessential elements that define the NoSQL movement? Will NoSQL forever remain a nebulous concept, in the same "I know it when I see it" category as pornography? [1]
These were the thoughts on my mind yesterday as MySQL 5.6 came out with a press release touting "NoSQL features." And what exactly were these much touted features? A memcached interface. For those of you who are not familiar with the memcached interface, here it is in all its 13-call glory. I can attach that to Excel, yet I will not end up with NoSQL.
This whole marketing overreach is like boasting that your neon yellow Miata S2000, with the enormous after-market wing that you added with your buddies' help, has "Bugatti features." You just might feel a little rattle when you speed past 35. Funny how the real Bugatti owners never notice that at 150.
But we can't blame MySQL for trying to buy into the NoSQL hype by coopting a poorly defined term. If there is an overhyped area right now, it's clearly Big Data in general, and under that heading, NoSQL is the worst offender (leading by a nose over Hadoop).
Now, there are lots of legitimate reasons for the excitement around this area. In fact, I would argue that the Big Data area is much more promising than what even the loudest voices in the press are proclaiming and forecasting. We really have lots of data, and we have an enormous shortage of tools that can keep up with the demand for functionality, scale and speed. It's an exciting space.
But the excitement brings out the marketing engines, and they make so much noise that it gets difficult to tell apart traditional RDBMSs (think Oracle or IBM's System R from That 70's Show, the other one) from revolutionary NoSQL data stores.
And we, the NoSQL folks ourselves, have been absolutely horrible at characterizing the area. If you look around with a critical eye, you hardly ever see anyone characterize NoSQL in positive, constructivist terms. The negativity is embedded in the name: No SQL. Well, my toaster has no SQL, so is it NoSQL? How can I tell? Not with that definition, I can't.
Some people have come up with the acronym BASE to characterize the NoSQL movement, which contrasts nicely with the ACID guarantees of traditional RDBMSs. Catchy it may be, but it misses the mark by a mile:
This term has no technical definition, but I think I know what it means. It's exactly like when I'm late to a meeting, and not just a little late, but late as in I-was-stepping-into-the-shower-around-the-time-when-you-guys-were-starting kind of late, and I call later from the car and say "On my way, I'm Basically There." Basically something is what we say when it's very much not that thing at all.
Nice, a technical term whose definition we can all agree on. Let's just phrase it in layman's terms for Devops Borat: the data, it ain't safe in there. Better store it in something else if you want to see it again.
Ah, lest we forget, way to roll a specific and incredibly mediocre consistency model into the definition, because whoever came up with the acronym just cannot fathom a world where NoSQL stores actually provide strong guarantees.
Face it: eventual consistency is no consistency at all. Data stores which never write to storage (e.g. by considering a write done when it's in the client's send buffer) are eventually consistent. Data stores that always read 42 are eventually consistent. And I do not mean either of these facetiously -- look up the technical definition if you don't believe me. When will you see your data again? Eeee-ven-tual-ly. I learn it from a book. A marketing book on BASE and NoSQL. Also, wikipedia.
The definition of NoSQL in Wikipedia is pretty confused as well. Take a look at the first sentence:
In computing, NoSQL (commonly interpreted as "not only SQL") is a broad class of database management systems identified by non-adherence to the widely used relational database management system model.
For one, it's blatantly revisionist: NoSQL is not commonly interpreted as "not only SQL", not now and certainly at no time in the past. For another, it's a totally useless definition. A text file I open up in notepad also does not adhere to the RDBMS model, but it's not NoSQL.
In Wiki's defense, someone has tagged the article for being out of compliance with Wikipedia's quality standards. Clearly, our community is way behind the curve -- even the hip-hop and punk rock pages have a better characterization of what their movement is all about.
Let me, in a spirit of positivity on Valentine's Day, offer three useful observations that might help capture the NoSQLness of a piece of software:
My definition of NoSQL, which I tried to make as precise yet as inclusive as possible, is as follows: "NoSQL: a broad class of data management systems where the data is partitioned across a set of servers, where no server plays a privileged role."
I think this definition accommodates every system I would characterize as NoSQL (e.g. HyperDex, Riak, Cassandra, MongoDB, etc), and it rules out foggy marketing speak. Feel free to pick it apart and to refine it, so that it may, one day, be better. Eventually. Or, ideally, within a time bound.