NoSQL v. SQL is the worst holy war ever.
deserettechnology.com
deserettechnology.com
I don't see it that way at all.
It's more like RDBMS is the all-purpose data store that attempts to distill the maximum number conceivable data storage, integrity constraints and lookup requirements into a set of powerful primitives. And NoSQL is a large group of technologies that are each optimized for specific cases which SQL is traditionally bad at, but which don't necessarily have much in common with each other.
It's like my experience with SVN vs Git. I didn't know how useful and more efficient my workflow would be if I used branches, so I never saw why Git was useful. Sure I could branch in SVN, but it was way more work. I got involved in a project where I had to use git, and I learned how branching works, and now I use it all the time because I understand where it's applicable.
I don't think you have to choose MySQL over MongoDB. I think you could be very happy using both, each for its purpose. You don't always know why you need something until you need it. It's always good to keep an eye on what others are doing.
I don't want to argue against the legitimate use of NoSQL solutions. I just don't think there are enough use-cases to justify the hype. For example, an article was posted here last week about using NoSQL solution to store e-commerce orders.
It's not a good solution. This type of data doesn't need to be searchable. It's using a database server as a caching mechanism. That seems wrong. Seems like memcached, mongo, couch, or anything else would have been better.
Heck, people have been using memcached for a long time, and yet all of a sudden people don't see a use for NoSQL setups?
Are we sure we're not just doing the same old "Defend what you know" dance?
An excellent comparative case in point that in my opinion actually undercuts what you are asserting.
You do not lose features and functionality in that transition (where as noSQL is by design reductive), and further, Git is a replacement for SVN and not a complementary tool.
The lesson Git, Ruby, Subversion, Apache, and many other projects have taught me is that instead of saying "What I have is fine, I don't need what you have", I need to ask "Why do you use what you use, why does it help you, and how might it help me?
Not that I am in one camp or the other. We use both relational and non-relational databases where it makes sense. The more of each (both in choices and users), the better, so far as I am concerned.
The whole idea with "NoSQL" is that you pick the best tool for the job.
Stop it. You're doing it again.The whole idea of "Computer Programming" is that you pick the best tool for the job. It has nothing to do with NoSQL.
Though I admit it's shorter, thus may eventually achieve ubiquity over ubiquitousness.
Nonetheless, both words are entirely proper, acceptable, and clear.
The belief that water is everywhere?
I don't think that's true for well-informed developers in a space where NoSQL is acceptable.
It might be true generally only in the sense that most developers don't know or care about NoSQL and don't like the idea of learning something new. That's to be expected; most of these guys will never leave .NET/Java and the blessed toolkits associated with each. They are corporate programmers and they don't really count.
A well-informed person might make some good social arguments against NoSQL adoption, like the lack of experienced available developers, or the relative immaturity of the respective codebase, or other issues that surround emerging platforms. These arguments will sometimes hold merit.
Otherwise, I don't know why one would be averse to the implementation of a "NoSQL" datastore for information like logs. I know that I've always having logs in the relational db.
I haven't met many experienced, decent developers who shun NoSQL when there is a good technical and environmental atmosphere for its implementation. I don't think it's a widespread thing.
That's true of Java, garbage collection, FPGAs, and every other type of computer technology.
It may be a consequence of turing completeness.
Things like: "we're dead" (when we just talk about loosing a contract or even closing one company), "it's totally catastrophic" (when someone cannot make it to a meeting, or the vegetables you had planned for dinner are not available anymore at the groceries).
Come on.
Talking about "worst holy war" for tooling trends - sorry, not for me, even for the purpose of creating a catchy headline or of underlining a point.
Oh and yes: I use both NoSQL and SQL, sometimes in conjunction in the same system.
As any sane developer would, and without having to go all-or-none either which way. I don't understand the people who are balls to the wall for either side. They both have a purpose.
Exactly. Everyone knows it was Patrick Stewart.
Do you seriously believe that you can rely your business solution which will run across dozen of PCs on someones experiment?
I'll hazard a guess that one reason for this is that NoSQL systems are mainly designed for scalability, and free operating systems are significantly cheaper to scale than platforms with a license fee per node.
But you and I appear to have very different needs.
GraphDatabaseService graphDb = new EmbeddedGraphDatabase( "var/graphdb" );
Of course, Neo4J is an embedded solution. It's quite different than using a separate server application.This is simply not true, if we're talking about horizontal scalability (which is probably the most relevant kind of scaling these days, because it's the most cost-effective).
You can't add more nodes to an RDBMS, keep ACID, and get linear scalability. You just can't.
From what I know of CouchDB, you could scale it linearly if you manage the partitioning of data yourself according to load. But if your data distribution changes you're a bit screwed. My impression though is that most people just use CouchDB on a single machine.
For BigTable, on the other hand, it really is just a matter of adding or removing machines at any time and getting nearly linear scaling. The load is dynamically balanced between machines, so this is actually practical.
Are there ways of scaling an RDBMS architecture? Yes, but they involve giving up ACID (like having read-only replicas, for example).
So I'm not saying RDMBS's are bad, just that there is a real limitation here.
Then we can have an even worse holy war than ever was before, making ourselves both wrong.
There. Problem solved. Unless you wanna kill a few hundred thousand people and go to war for a few hundred years.
(If I'd said "The holocaust", I could've Godwinned this thread, but that wasn't really a holy war.)
I'm trying to think of other real "holy wars" - the 30 Years War is perhaps the only other major one I can think of. I guess most other "holy wars" are really justs lingering fall out from conquests Ottoman invasion of Europe, Ireland, .....
Consider that Sweden, one of the big participants, was financed by the famously Protestant country France! :-)
(Let us bunch the Crusades as one single example, at least for this argument.)
(The Huns/Mongols were religiously tolerant and motivated by conquest, right?)
But where the Ottomans religiously tolerant in all periods?
It seems the Turks where really disliked by their subjects (both in Middle East and in the Balkan), where did that come from, then?
Neither side will ever give an inch, and vast armies of anonymous have lobbed internets at each other, killing a few StarCraft players in Korea and memeing millions upon millions more, with more arriving every day.