About five years ago, I was working as a consultant dealing with a lot of "Strategic projects" for customers. Strategic project, I have learned, was a code name for something that costs a lot of money, and was usually in trouble.
At that time, I was dealing mostly with NHibernate (open source object relational mapper library), so I had a chance to see the type of issues people run into with their databases. In essence, those issues came in two different flavors. The first flavor was "let us try to shove a square through a round hole" in which the project was trying to do things that the poor RDBMS was just never meant to do. And the second flavor was "we are in a hurry, just get it over with" style.
A memorable occasion of running into that was the 15K project. I named it that way because every single page view would generate 15,000 database queries. And just to make sure that it is no mistake, yes, I am talking about fifteen thousand queries per page.
That is how RavenDB was born. I decided that I wanted to create a database that would make sense. A database you wouldn't have to fight with all day just to get where you want. RavenDB was designed to be a second generation database. That isn't just a slogan; it means that we have taken a lot of time to look at what else was around, to see what worked and where things didn't quite work.
Few of the things that we really tried were to go with: it just works, safe by default, and falling into the pit of success. That means, by default, RavenDB is going to try to do the right thing. But we also know that we can't figure one out on our own for all scenarios, so we also added a lot of knobs that you can tweak to make sure that RavenDB is doing exactly what you want it to do.
You can think about it like a game. You can come in and start playing, and everything is going to be really fun. But, there is also an entire extra layer that you can explore; this includes cheat codes, secret levels, and god mode.
That is what this book is meant to be. It is the cheat sheet that you can refer to get the absolute most from your RavenDB application. This is a book that is meant to take you from the merely good to the absolutely awesome. It explores a lot of the nooks and crannies in RavenDB; all the things that you need to know beyond the basics.
Brian has done a great job in not only explaining how things work, but also in selecting what are the sort of things that you need to know. The book covers issues such as scaling out (both sharding and replication), deploying to the cloud, multiple ways to extend RavenDB and customize it to your needs, monitoring in production, and a whole host of other things.
I would especially pay attention to the chapters about optimizing your data model and API, although I expect most people would go directly to the scale out sections. I have found that by making relatively small changes in the way I am modeling my data, I can get quite a bit more from my systems, without making the jump for a distributed system.
And after I actually move to a multi-node system, whether it is a highly available cluster or a set of sharded node (or indeed, the common mode of sharded and replicated cluster), the actual data model is probably the most important aspect for performance, scalability, and maintainability.
To summarize, go ahead and do the cool stuff first. But pay attention to the whole book. I think that Brian has done an excellent job in getting the crucial information you need to really get the most from RavenDB. And this book is one of the best ways to go from being merely proficient to being absolutely awesome.
Enjoy reading!
Oren Eini aka Ayende Rahien
Hibernating Rhinos