I Can't Wait for NoSQL to Die (2010)
widgetsandshit.com
widgetsandshit.com
Or maybe it really is about the simpler APIs that Parse and Firebase provide.
Or, maybe Firebase is mega popular due to the realtime change events. Too many variables. :)
This new hipster relational model is not nearly as universal as its proponents are claiming.
The point here is that blanket statements are stupid. Especially when the line between NoSQL/SQL is completely grey now.
Once dust is settled on this battlefield, the world will become a better place, where more people are aware of their tools limits.
> Eventually, Google developed a custom distributed Relational database management system (RDBMS) known as Google F1 specifically for the needs of the Ad business, which requires strong consistency, high scalability across data centers and powerful SQL queries. The interface has also been revamped to offer better work flow with additional new features, such as Spreadsheet Editing, Search Query Reports, and better conversion metrics.
MongoDB, for example, uses collection latches. Thankfully, these are per-server, so if you're using sharding you've got one per server. It is still no better at single-server performance than MySQL using table-based locks (except that you are unable to write a query that uses two tables), except that the latches and 'documents' (locks and rows) are lighter-weight.
The writes in mongo are only document atomic. Why not use a latch per-document? It needn't be memory intensive; Use a bloom table to represent the latches, and a small amount of entries (a thousand or so) is plenty to allow real concurrency.
Lots of companies use collections badly. I've seen a collection of user addresses. These make no sense as a collection; They're less than a kilobyte long. They should be an array in the user object. Mongo documents are meant to be an order of magnitude larger than SQL rows, and a few kilobytes here and there won't break the bank. You're better off doing a 1M read than three serialized 1k reads; The RTT is comparatively long, even at sub-milisecond latencies.
And the most well known database that is derived from BigTable is Cassandra which is unquestionably very well designed and the authors (Facebook, Datastax) clearly understood what they were doing.
I'm genuinely curious about one point, though: How is Walmart a "real business" vs Twitter?
- One of them actually earns some money from time to time.
- If one of them disappeared overnight, it would have some impact on peoples' lives.But, can't it be argued that in fact if Twitter disappeared overnight, it would have some tangible effects on the earnings of many businesses that use the platform for advertising/brand presence?
Wikipedia is basically MySQL front-ended by ngnix and memcache caches.
It just seems that Oracle, Informix, SQL Server, DB2, Sybase SQL Server don't seat well with SV culture.
Everyone is assuming they will need to grow quickly. The costs of the systems you list become prohibitively expensive when you grow.
If e.g. Google or Facebook had to pay for an Oracle or SQL Server for their storage (in case those DBs could actually deliver the performance Google needs), or, for that matter - Windows Server licenses), they would have had to raise a lot more money and dump it into Oracle/MS. It is this that doesn't sit well with SV culture.
> It says a lot when a Big Company dumps a Big Database vendor and moves to Oracle to save money.
I do not know which Big Company you are referring to? But also, never trust a headline which says "Big Company does X" to tell the whole story. It's very often part of a larger deal, a big discount given to them specifically for that headline, or some soft "nice business you have here, wouldn't it be awful if some patent litigation ruined it? That can be avoided if you buy our products" talk.
But we still have use cases where we don't use these DB - partly for cost reasons and partly because we want different functionality. Berkeley DB ldap for accounts, ETL and analytics moving into Hadoop, some apps use Mongo and even other smaller apps use MySQL, and those are just the projects I know about from my view. We still pay for support contracts on all these projects but obviously costs are significantly lower.
Even in a company that doesn't mind paying large amounts for enterprise database, I don't think that that reaching for one of these major commerical DB is always the right solution. Not all projects need the support you're paying for from them, and beyond that for some useage patterns I don't think they're even the right solution to reach for, regardless the cost.
It also fits in as Key/Value stores for temporary session data, and where you need very high performance in memory access that can be shared between several servers or processes.
I'm not suggesting that's the case for NoSQL, just questioning the way you're measuring it.
http://widgetsandshit.com/teddziuba/2010/03/i-cant-wait-for-...
Anyway, NoSQL is definitely a good solution for some usages, I personally created a special analytics service using Cassandra that is good to store unstructured and unrelated data to be later computed and analyzed. It would be barely impossible to achieve this without hitting on performances due to the data integrity checks that most SQL servers/engines perform. On the other hand, I use SQL everywhere else and I am happy with that. It scales well if the design is well made and it's just a matter of research and a little bit of preparation to create an SQL environment that scales. It's not easy as some NoSQL databases, but not that hard and impossible as some of these solutions are claiming to gain new customers...
On Node.js I have some doubts, even if the general nature is very scalable and is well proved as fact, there are other solutions that are good alternatives like Golang or some frameworks written in Scala, maybe on top of AKKA.
The big problem is that a lot of companies and investors are asking for scalability, but the reality is just that one service on hundreds built are going to be so successful to require a scalability plan. If you hit that target you would definitely get enough money to even migrate the technology to something better and scalable.
NoSQL databases are much nicer to work with for typical web applications (yeah, even the ones with relational data). They are much closer to how we actually use data as a programmer. Most startups using a SQL database will be using an ORM, which is a massive piece of software designed to make SQL databases more compatible with how we actually work. Even then, they still don't have the flexibility you get from using a nosql solution.
As for this article, it is hard to get past the fact that he thinks the only reason to use nosql is for scalability. He also states that mysql was fine, yet fails to understand that the massive startups using mysql didn't use it at all like a relational database.
No, they're how you, as what sounds like a predominantly object-oriented programmer, use data. And that's fine, but don't pretend it's universal. A programmer approaching a problem from a functional perspective may well exploit the relational nature of an RDBMS to work smartly within the paradigm. (I've seen it done, and done very well and easily, in a way that's approachable even for relatively novice functional programmers.) Even if using an object-oriented style of programming, with the feature set of something like PostgreSQL--or SQL Server, if that's your bag--and the ability to very easily provide assurances around data integrity and correctness using the built-in tools, you have a very powerful and easy-to-use set of tools for building a rugged, correct data model. For product developers that do not find a cavalier approach to users' data to be acceptable, this can be a wise choice. Being fast and wrong is not always the right answer (and I personally consider it to usually be the wrong one).
But it's even better to be fast and right, and that can quite obviously be done, in many cases, with a relational data store. And this may mean understanding how to write code in a style that doesn't necessarily use the Active Record pattern or a similar ORM. That's true. But that does not imply an inherent product development benefit to using such a tool (for their partisans), nor does the common reliance on these tools and its well-documented failures imply that the various NoSQL technologies are better at building a product.
User1 firstname1 lastname1 role1 rolename1
User1 firstname1 lastname1 role2 rolename2
User1 firstname1 lastname1 role3 rolename3
This is purely a result of how the database works. That data is never presented to the user in that way. It has to be converted into a new form.