‹ back to Testimonials

PIRform


PIRform is electric with RavenDB

Who are you? (Name, company, position)

Sean Kearon, the co-founder of PIRform who produce intelligent software for certification of fixed wire electrical installations to the British Standard BS7671.

In what kind of project / environment did you deploy RavenDB?

We are using RavenDB in a desktop application where RavenDB is deployed to the user’s desktop itself.

What made you select a NoSQL solution for your project?

When migrating a relational database you are forced to migrate the whole schema at once and this led to support issues when users were running on hardware lower than our minimum specification. I had been using an ORM against a relational database (DevExpress XPO & VistaDB) for a while and I was aware that a NoSQL approach significantly reduces the need to explicitly change structure and means you can change single documents at a time when you do need to change structure.

When using an ORM/RDBMS approach you often find that you need to consider the relational model and the ORM itself whilst designing your domain model. I was finding that this sometimes led to compromises in the design and I found that to get around these limitations I was starting to serialise objects to JSON and store them directly in the (then relational) database. There had to be a better way!

What made you select RavenDB as the NoSQL solution?

RavenDB’s .Net API is very well designed, really easy to use and has tight integration with .Net. I was also aware of the Hibernating Rhinos team and knew that they had a very strong reputation in the .Net community.

How did you discover RavenDB?

I have followed Ayende’s blog for a few years and have been doing background reading about RavenDB and other NoSQL solutions for a while now.

How long did it take to learn to use RavenDB?

I managed to port my application to RavenDB in less than two weeks, this included learning RavenDB. I pretty much used the RavenDB website, Ayende’s blog and the newsgroup as resources to help me along. The newsgroup gives first class support and was particularly helpful. There is both strong community support as well as huge input from the Hibernating Rhino team itself.

I also referenced other blog articles, finding Daniel Lang’s blogs particularly relevant to my scenario. I wish I’d seen the TekPub and Plurasight offerings sooner than I had as I’m sure they would have reduced my ramp up time.

What do you consider to be RavenDB strengths?

It has very good performance on the desktop and handles resources well.

The developer experience with RavenDB is very friction free. The .Net API is well designed an easy to use. It gives you surprising freedom to model the structures you need in your application. One of the things that really blew me away about RavenDB was finding that it makes storing a model like this almost trivial:

  public class Container
  {
     public string Id { get; set; }
     public ILookup[] Lookups { get; set; }
  }

It removes most of the need to migrate schema. When you need to make structural changes, they are done at the document level which in turn gives finer control over resource usage, especially pertinent when running on low powered PCs.

What do you consider to be RavenDB weaknesses?

The only small criticism I have so far is that the export facility that ships with RavenDB, Smuggler, only works over HTTP and you therefore need to its HTTP server running in embedded mode. Although that is trivial to do, it would be nice to have a pure embedded option as well.

Now that you are in production, do you think that choosing RavenDB was the right choice?

Yes, completely.

What would you tell other developers who are evaluating RavenDB?

Initially I was put off by the pricing of RavenDB, especially as there are some decent free alternatives out there. However, having now ported to RavenDB I can see that the amount of time and frustration that RavenDB would have saved me in the past massively outweighs the (financial) cost.

I am still finding plenty of times when I realise that I can now just implement it as I want to implement it – RavenDB just doesn’t get in the way. The ease of use is truly priceless!