Today's book review is about the very interesting, and long-awaited, book from Pramod J. Sadalage e Martin Fowler.
Title: NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence
Authors: Pramodkumar J. Sadalage, Martin Fowler
Editor: Addison Wesley (September 2012)
NoSQL: beyond buzzwords
The term NoSQL quickly became a buzzword, and NoSQL Distilled authors know this very well, so they decided to face this problem - in my opinion - in the best way: give a clear, effective definition of NoSQL and stay with it throughout the whole book; of course they also state that it is their personal and, most importantly, pragmatic interpretation.
Every section is also very practical and concise, the latter being fundamental to the intended audience of this book: CTOs, project managers, developers, those kind of people that need to know a about these topics but have very little time and resources, and cannot even try out every possible technology.
Part I: Understand
The first part of this book describes the most important categories of NoSQL databases, and what to expect from each of them. It starts with a compulsory (but... peaceful) analysis of the limits of the relational model, and how NoSQL databases intend to overcome those limits. Chapter 4, "Distribution Models", describes the most common patterns for data distribution, always comparing them to estabilished relational solutions. After this gentle intro, we get into hot issues; we can find an answer to most of the questions that a typical "relational animal" would ask when entering the NoSQL world:
- consistency and durability of data;
- an outline of the CAP theorem;
- transactions and ACID properties.
Al these "sensitive" (its an euphemism) topics are covered with great maturity and in very practical way, showing how actually there are many real-world use cases where durability and transactional requirements, which after years of relational model we take for granted, can be relaxed. They show how this can really lead to new performance levels, without too many tradeoffs.
There's also a (very) small chapter about Map-Reduce technique, its close relation with NoSQL databases, all with some simple examples.
Part II: Implement
This second part analyzes more in depth all the NoSQL database types:
- Key-Value Databases;
- Document Databases;
- Column-Family Stores;
- Graph Databases.
Each of them is compared to the others by some common features:
- data consistency;
- querying capabilities and application development;
- performance: data distribution, clustering, sharding, common optimization techniques.
After each introduction, there's a more in-depth analysis of possible usage. I particularly appreciated "Suitable Use Case" and "When Not to Use" paragraphs, because they give you an immediate feeling about the potential of each technology.
In Schema Migrations are introduced some common patterns for database refactoring, mostly ported from relational world, but with NoSQL peculiarities.
The last chapters of this section some hypothesis are made about the future of applications, and the role NoSQL database will have in this evolution. I've personally found very profound the chapter Polyglot Persistence, where authors show how a possible future (which is somehow already happening) would see cohexistence of varying data access technologies, and the consequences that this multiplicity would have on the performance, complexity and reliability of applications.
The competency and authority on of the authors is without question, but what I really appreciated is the conciseness and open-minded attitude of the whole work. The risk, indeed, is that often these topics, like CAP theorem and transactions for example, get quickly heated and "religious"... Also, I liked very much the "Key points" section after each chapter, very useful as a link between chapters.
I somehow missed a more in-depth analysis, especially regarding programming and query examples, or some hints about configuration and deployment on production systems.
- covers every major NoSQL technology;
- well written and easy to understand;
- some sections are too small;
- too few code examples;
- configuration and deployment suggestions would be helpful.