NoSQL Databases: What, Why and When
ontwik.com
ontwik.com
The author compares map-reduce to Teradata. Serious question: could a system on the scale of Google's various "apps" run on a Teradata database?
PS: The median developer at any large company is practically incompetent, so it's probably a vary good trade off once you have data centers of that size. However, for comparison Slashdot ran on 4 fairly cheap machines for a long time.
A better solution would be one that gives developers fine-grained control over "scalable and loose" vs "less-scalable and tight", rather than all-or-nothing in either direction.
That is to say: I want full ACID on my "financial transactions" collection and maximum scalability for my "chat messages" one -- but I want them in the same overall system, accessed via the same API, managed via the same tools, and with knobs that can be inexpensively modified on the running system.
As far I can tell, it would be easier to add layers of indexes, data control, schema control, transactions and so-forth on top of something like Tokyo DB than it would be to take apart a SQL database.
Layering transactions atop a key-value store would be very difficult to do efficiently, for example.
(Which would be the main driving factor for abandoning ACID in the first place.)
So check out H-Store[1], now commercialized as VoltDB[2]. You get full ACID, while staying with SQL, but also extremely fast performance and near-linear scaleout.
In my own tests (on call completion, save record and debit customer balance), I was easily to push over 100,000 transactions/sec on a 3-server cluster (low end, sub-$1000 servers). This is while maintaining full ACID and using SQL.
Personally: I like transactions, but I'm not in love with SQL; additionally I'd like to have the options of:
- deploying systems, or portions of a system, that continue working when widely distributed over cheap, unreliable networks and running on cheap, unreliable hardware.
- Support large datasets (more slowly) but pay $100/terabyte instead of $LOTS/terabyte.
Of course, everything has its downsides -- which is why my stated desire for a do-everything DB is a bit of a pipe dream.
I may want ACID properties but over a document-structured store, for example, and there's nothing contradictory in such a desire...
In fact, as a continuation of my "mix and match" consistency pipe dream; I'd like to mix-and-match data models within the same system, too! Strongly typed w/ integrity constraints; bag-o-data; etc...
Some notes to introduce the slides: http://www.alberton.info/nosql_databases_what_when_why_phpuk...