Herding Code 83: Ayende Rahien on RavenDB

This week on Herding Code, the guys talk with Ayende Rahien (a.k.a. Oren Eini) about RavenDB, a new Open Source (with a commercial option) document database for the .NET/Windows platform.

  • The shows starts with a general definition of document databases.  Ayende then contrasts RavenDB with two other popular document databases, Mongo and CouchDB, and comments that RavenDB is much more similar to CouchDB than Mongo.
  • Ayende talks about how RavenDB indexes work – they’re written when you store data, but not immediately after. He continues with an explanation of transactions – data is transactional, but indexes aren’t.
  • Scott K brings up Node.js and asked if Ayende had looked at the event driven approach over spinning up threads. Ayende talks about how RavenDB previously worked like that, but it made debugging very painful. Instead, the architecture is now focused on the end goal – RavenDB will never make you wait for a write.
  • The guys take a question from Twitter about whether there are plans to support Mono. Ayende says yes, but outlines some of the changes that will be required to make that happen.
  • Scott K asks if traditional RDBMS performance tweaks based on moving data and indexes to other spindles are possible and useful on RavenDB.
  • Jon asks about how this relates to Reactive Extensions, and Ayende discusses how Event Sourcing works in RavenDB.
  • Jon and Scott K ask some questions about storage formats – JSON, binary serialization, etc.
  • The group digs into how Map / Reduce works.  Ayende explains Map / Reduce in generally terms as well as how it pertains to RavenDB.
  • K Scott asks questions about indexing – how it’s done, how indexes are defined and impacts of keeping a lot of indexes. Ayende talks about how indexes are essentially materialized views, and how the RavenDB query engine can use both LINQ and Lucene syntax.
  • K Scott asks about transaction support, embedded support, and concurrency.
  • The guys talk about the “sweet spot” for RavenDB and document databases. Ayende talks about advantages of working with a document database, and the benefits of working without a defined schema.
  • Jon asks if ORM’s just go away in a document database context and the conversation moves on to talking about different architectures and development strategies that come into play when working with schema-less documents.
  • K Scott mentions that this seems like it would work really well with Aggregate Roots in Domain-Driven Design.
  • Ayende and Jon discuss how aggregate queries compare in the context of some of the inefficient queries in MVC Music Store.
  • Kevin drills a little deeper into the versioning challenges.
  • Jon asks about the use of .NET 4 features with RavenDB including the Task Library and the Expando object. Ayende talks about how they made heavy use of the Dynamic keyword and MEF in RavenDB. Basically, everything except for storage and indexing is handled via MEF.
  • Ayende talks about the extensibility points such as read and index previews.
  • Jon begs for punishment by asking for Ayende’s comments on the MVC Music Store. Ayende talks about how he prefers tutorials be very explicit about what they’re not going to cover in detail. He recommends completely removing details which aren’t the focus of the tutorial. Then he goes on to talk about how things like shopping carts just seem to work more smoothly with document storage rather than relational databases.
  • Jon asks about the licensing models. Ayende talks about how people were unhappy with the initial pricing model due to the differing deployment expectations, and how he worked with customers to establish a pricing model that works for everyone.
  • Ayende teaches the gang the term “Chinese Interesting.”

Show Links:

Show notes compiled by Ben Griswold. Thanks!

Download / Listen:

Herding Code 83: Ayende Rahien on RavenDB