Hacker News new | ask | show | jobs
by jrudolph 3467 days ago
I'm using it in production as the backing data-store for a web app. There are a few very nice things about it:

  - ACID Transactions on multiple documents + queries by ID
  - BASE (eventually consistent) map reduce indexes
  - Great client libraries: Unit of Work pattern, optional client-side caching
  - extremely productive, no ORM required due to document model, unit testing support via In-Memory DB, JSON.NET serialization, support for polymorphic object graphs etc.
  - very powerful indexing (we use map reduce, spatial + multi-facets) + fast querying
  - Integrated RavenDB 3.x management studio based on HTML5 and generally solid to work with
  - safe defaults, I have never lost data with it (heard some bad things about Mongo in that regard though)
However, there are clearly some gotchas where in trying to save you from shooting your foot off, RavenDB will occasionally shoot off your leg instead. Upside is, these are well-documented and usually caught if you test with realistic or production workloads:

  - RavenDB will by default throw an exception after more than 30 queries per session to warn you about SELECT N+1 issues
  - No unlimited result sets (will silently cap at 128 unless limits explicitly specified). You can use streaming to fetch _all_ documents if you really need it but this is explicit
  - BASE Indexes require some thought in your UX/UI to handle properly
Those are the most common issues I've heard about. Once you know them, they are easily caught in code review. I've run into a few issues though. Defining indexes using LINQ works great in 95% of cases, but those 5% of cases where it doesn't are a PITA to debug. Some of those I ran into were caused by bugs, other times I failed to understand correctly how certain things worked correctly. With all issues I've had, the team has always been super responsive and fast to turn out a fix or offer advice on how to do it correctly, even though I wasn't paying for a support contract. All they need to get going is a minimum reproduction (e.g. unit test) they can work off and a mail to the RavenDB mailing list.

Would I use it again? Yes, definitely. I've heard good things about 4.0's performance though I expect it will be quite a while before it's stable. And they've been working on a new client library that should help prevent the common "beginner mistakes" above a little better.