I've just finished reading NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence, a fresh book by Pramod J. Sadalage and Martin Fowler and that's a good opportunity to do my first short book review. I don't have real NoSQL experience other than few hours of experiments with RavenDB, one Ayende's presentation and few posts on his blog, but it's enough to have some basic understanding of the topic. So I took the paperback dated 2013 with a lot of enthusiasm and curiosity.
The book is divided into two parts. The first consists some background shown from more theoretical yet readable perspective, different than on Ayende's blog, but still far from dry academic papers. The part covers concepts such as scaling or sharding and mentions CAP theorem. It also provides quite a good map-reduce idea explanation, but few more different examples will surely make it even easier to understand. This background information is not a must to start early experiments with NoSQL databases, but can be really useful for more DBA-minded programmers to become more familiar with the ideas.
The second part of the book, called "Implement", looks through the different NoSQL paradigms. Unfortunately, authors haven't avoided some repetitions from the first chapter, what is not really needed for such a thin book, I think. The second half compares key-value stores, document databases, column-family stores and graph databases using common criteria like terminology, scaling possibilities, query features, availability, support for transactions etc. There is also a strong emphasis on discussing the capabilities for operating in clusters. Some implementations for each NoSQL approach are mentioned, few pros and cons discussed, but the book doesn't fulfill a role of quick start guide for these databases - in order to implement even something very simple in each technology, one have to seek for another sources.
Although I was not extremely delighted with the book, I find it worth reading even only for the final thoughts and overall remarks. On the one hand, a trendy buzzword schema-free was demystified. The authors stressed that there is always a schema somewhere as the clients need to understand the data somehow and NoSQL solutions are just moving the responsibility of keeping the data definition from server side to the clients and this has some non-negligible consequences e.g. for data migrations. On the other hand, they are urging to use the proper tools for given scenario and convincing that RDBMS is not the one and only tool for everything. Even the book's subtitle mentions "polyglot persistence" - the concept that a single application can benefit from having multiple underlying data storing technologies, each of them designed exactly for the job it's doing.
And the final answer for the question "whether to use NoSQL databases" is as always: "it depends".