Ayende @ Rahien

It's a girl

RavenDB in Siberia

A good chunk of the RavenDB Core Team is going to be in CodeFest in Novosibirsk this weekend, including yours truly.

We are going to be handing out a lot of cool stuff, and we got some really nice things to talk about. And yes, I’ll keep the suspense until I get to meet people face to face.


Published at

Originally posted at

QCon London and In The Brain talk – Performance Optimizations in the wild

The RavenDB Core Team is going to be in the QCon London conference this week, so if you are there, stop by our booth, we got a lot of cool swag to give out and some really cool demos.

In addition to that, on Thursday I’m going to be giving an In The Brain talk about Performance Optimizations in the Wild, talking about the kind of performance work we have been doing recently.

The results of this work can be shown on the following graph:


Come to the talk to hear all about the details and what we did to get things working.

Published at

Originally posted at

Comments (3)

RavenDB Days this week!

It is coming, and soon Smile.


I’m going to talk about what is new in RavenDB 3.0 (like the posts you have seen so far, a lot has changed). Manuel will present a case study of building high scale systems, then Michael will give you a guided tour through the RavenDB internal.

After lunch, we’ve Mauro talking about indexes and transformers, then I’m going to talk about the additional database types that are coming to RavenDB, and finally Judah is going to show how RavenDB speeds up your development time by a factor or two.

You can register to that here.

Published at

Originally posted at

Talking in the Twin Cities code camp in October

I’m going to talk at the twin cities code camp this October, about Polyglot Persistence and dedicated database solutions. This is a natural extension of the talk I did in the RavenDB Conference, when I created a live coding database capable of millions of writes per second on my laptop.

Published at

Originally posted at

RavenDB 3.0 Days in Sweden

We are going to do a European version of the RavenDB Conf in just over a month, coming to both Malmo and Stockholm for a full day event.

You can see the full details here, but the basic idea is that we are going to be talking about RavenDB 3.0, including showing off all the new stuff, then show a real world use case for managing high scalability systems with RavenDB. We’ll go in depth into the codebase, and then hear about how to make the best use of transformers and indexes and then end the day with a look forward into what has been slowly cooking in our labs and the grand finale with a full guide on how best to build RavenDB applications in RavenDB 3.0

We are actually going to arrive a day early, so if you are located in Malmo, and want us to come to do some on site RavenDB consulting or training on Sep 17, contract us (support@ravendb.net) and we’ll set it up.

You can register to the event using the following link.

Published at

Originally posted at

RavenDB support guarantees

As part of the 3.0 release of RavenDB, we are going to do a remap of our support contracts. We’ll make a formal announcement about it later, but the idea is to offer the following levels:

  • Standard – about $500 a year per serve, business day availability, maximum response within 2 business day.
  • Professional – about $2,000 a year per server, business day availability, maximum response within the same business day.
  • Enterprise – about $6,000 a year per server, 24x7, maximum response within two hours.

In addition to that, we’ll continue to have the community support via the mailing list. That said, I want to make it clear what kind of support guarantees with are giving in the mailing list:

  • None
  • Whatsoever

Put simply, the community mailing list is just that, a way for the community to discuss RavenDB. We look at that, and we try to help, but there is no one assigned to monitor the mailing list, this is pretty much the team waiting for the code to compile or the current test run to complete and deciding to check the mailing list instead of Twitter or the latest Cat Video.

Any support on the mailing list is provided on a ad hoc basis, and should absolutely not be something that you rely on. In particular, people with EMERGENCY or PRODUCTION ISSUE aren’t going to get any special treatment. If you need support, and if you run critical systems, you probably do, you need to purchase that. We provide guarantees and follow through for the commercial support packages.

I’m writing this post after an exchange of words in the mailing list when a user complained that I went offline at 1 AM on a Saturday night and not continue to provide him free support.

Published at

Originally posted at

Comments (9)

Exploring the data, extracting series from my blog posts

I’m pretty bad when it comes to actually organizing my blog. I just like to write stuff out, I don’t like to do things like properly setting things up in series. Mostly because I usually think about one post at a time, or three at the most.

I did notice that I usually use something like “Series name: post name” convention when writing series of posts. So I decided to write the following index to check the data out:


As you can see, this is pretty simple way of doing things. And that lead to the following data.


Some of those are obviously false positives, and we have things like this, which are obviously out:


But it looks like important series are also spread over time:


I think that I’m going to have to do a new blog feature, to highlight those emergent series.

Published at

Originally posted at

Comments (3)

NSBCon 2014 & Distributed Systems with RavenDB

I’m going to be talking in that 2014 NService Bus Conference. More specifically, I’m going to be talking about how to build proper distributed systems with RavenDB. What sort of things you need to watch out for, what features in RavenDB you can take advantage of and general distributed data design.

But there is more going on with RavenDB in NServiceBus. A lot of the new features in the Particular Service Platform are built based on RavenDB, and you’ll have the chance to hear all about it there.




Published at

Originally posted at

RavenConf, day 1

I started the day at 5:30 AM, because we had to go to the venue and get everything ready. This is now 01:30 AM for the next day, and I am still stoked.

I took this picture at around 8 AM, when people started to queue up to go into the conference:


For that matter, you can see a few other photos from the conference here. I’ll do a retrospect about the conference when I have time to breath. But for now, I can report that the RavenDB Hackaton was quite a success, we have a cool new feature mostly implemented. You can see it here: https://github.com/ayende/ravendb/tree/duco

And yes, I’ll talk about that in the future as well. But right now, I’m going to have a db capable of managing a 100 billion records tomorrow, live on stage, so I probably need to get some sleep done…

Published at

Originally posted at

Comments (3)

Rob’s RavenDB Sprint

Rob Ashton is a great developer.   We invited him to Hibernating Rhinos as part of his Big World Tour.  I had the chance to work with him in the past on RavenDB, and I really liked working with him, and I liked the output even better. So we prepared some stuff for him to do.

This is the status of those issues midway through the second day.


And yes, I am giddy.

RavenDB has the best users


Talk about making my job easy. Thank you Barry, and I am sorry it took me 17 minutes to get the fix out.

Published at

Originally posted at

Comments (5)

Microsoft patterns & practices Symposium 2013

A while ago I had to promise myself that I wouldn’t be traveling so much (translated: all the time). Which is probably why I would not be in this event.

There are some quite interesting talks scheduled there. In particular, I would note:


Published at

Originally posted at

Professional .NET in Vienna–Sep 14–and what is NEW is RavenDB

I am going to be in the Professional .NET 2012 conference in Vienna, Austria next month, and I think we can plan for a special surprise.

Sep 10 is going to be the close off date for new features the next release of RavenDB (feature freeze), and in my talk, I am going to take you through a tour of not only what is RavenDB, but what are all the goodies that you can expect from the next version.

See your there…

Published at

Originally posted at

Comments (1)

Send me a patch for that

This post is in reply to Hadi’s post. Please go ahead and read it.

Done? Great, so let me try to respond, this time, from the point of view of someone who regularly asks for patches / pull requests.

Here are a few examples.

To make things more interesting, the project that I am talking about now is RavenDB which is both Open Source and commercial. Hadi says:

Numerous times I’ve seen reactions from OSS developers, contributors or merely a simple passer by, responding to a complaint with: submit a patch or well if you can do better, write your own framework. In other words, put up or shut up.

Hadi then goes on to explain exactly why this is a high barrier for most users.

  • You need to familiarize yourself with the codebase.
  • You need to understand the source control system that is used and how to send a patch / pull request.

And I would fully agree with Hadi that those are stumbling blocks. I can’t speak for other people, but in our case, that is the intention.

Nitpicker corner here: I am speaking explicitly and only about features here. Bugs gets fixed by us (unless the user already submitted a fix as well).

Put simply, there is an issue of priorities here. We have a certain direction for the project that we want to take it. And in many cases, users want things that are out of scope for us for the foreseeable future. Our options then become:

  • Sorry, ain’t going to happen.
  • Sure, we will push aside all the work that we intended to do to do your thing.
  • No problem, we added that to the queue, expect it in 6 – 9 months, if we will still consider it important then.

None of which is an acceptable answer from our point of view.

Case in point, facets support in RavenDB was something that was requested a few times. We never did it because it was out of scope for our plan, RavenDB is a database server, not a search server and we weren’t really sure how complex this would be and how to implement this. Basically, this was an expensive feature that wasn’t in the major feature set that we wanted. The answer that we gave people is “send me a pull request for that”.

To be clear, this is basically an opportunity to affect the direction of the project in a way you consider important. What ended up happening is that Matt Warren took up the task and created an initial implementation. Which was then subject to intense refactoring and finally got into the product. You can see the entire conversation about this here. The major difference along the way is that Matt did all the research for this feature, and he had working code. From there the balance change. It was no longer an issue of expensive research and figuring out how to do it. It was an issue of having working code and refactoring it so it matched the rest of the RavenDB codebase. That wasn’t expensive, and we got a new feature in.

Here is another story, a case where I flat out didn’t think it was possible. About two years ago Rob Ashton had a feature suggestion (ad hoc queries with RavenDB). Frankly, I thought that this was simply not possible, and after a bit of back and forth, I told Rob:

Let me rephrase that.
Dream up the API from the client side to do this.

Rob went away for a few hours, and then came back with a working code sample. I had to pick my jaw off the floor using both hands. That feature got a lot of priority right away, and is a feature that I routinely brag about when talking about RavenDB.

But let me come back again to the common case, a user request something that isn’t in the project plan. Now, remember, requests are cheap. From the point of view of the user, it doesn’t cost anything to request a feature. From the point of view of the project, it can cost a lot. There is research, implementation, debugging, backward compatibility, testing and continuous support associated with just about any feature you care to name.

And our options whenever a user make a request that is out of line for the project plan are:

  • Sorry, ain’t going to happen.
  • Sure, we will push aside all the work that we intended to do to do your thing.
  • No problem, we added that to the queue, expect it in 6 – 9 months, if we will still consider it important then.

Or, we can also say:

  • We don’t have the resources to currently do that, but we would gladly accept a pull request to do so.

And that point, the user is faced with a choice. He can either:

  • Oh, well, it isn’t important to me.
  • Oh, it is important to me so I have better do that.

In other words, it shift the prioritization to the user, based on how important that feature is.

We recently got a feature request to support something like this:

   .Where(x=> searchInput.Name != null && x.User == searcInput.Name)

I’ll spare you the details of just how complex it is to implement something like that (especially when it can also be things like: (searchInput.Age > 18). But the simple work around for that is:

var q = session.Query<User>();
if(searchInput.Name != null)
  q = q.Where(x=> x.User == searcInput.Name);


Supporting the first one is complex, there is a simple work around that the user can use (and I like the second option from the point of view of readability as well).

That sort of thing get a “A pull request for this feature would be appreciated”. Because the alternative to that is to slam the door in the user’s face.

The evil tricks of “It Works On My Machine”, in reverse

The following is quite annoying. I am trying to make an authenticated request to a web server. In this instance, we are talking about communication from one IIS application to another IIS application (the second application is RavenDB hosted inside IIS).

The part that drives me CRAZY is that I am getting this error when I am trying to make an authenticated request, but using the exact same code and credentials, from another machine, I can make this work just fine.


It took me a while to figure out that most important part, when running locally, I was running under my own account, when running remotely, the application run under IIS account. The really annoying part was that even when running on IIS locally, it still worked locally and failed remotely.

It took me even longer to figure out that the local IIS was configure to run under my own account as well Sad smile

Once that discovery was made, I was able to figure out what is wrong and implement a work around (run the remote IIS site under a custom user name). I know that the actual problem is something relating to permissions on certificate store, but I have no idea how, or, for that matter, which certificate?

This is plain old HTTP auth, no SSL, client certs, etc. I am assuming that this is raised because we are using Windows Auth, but I am not sure what is going on here with regards to which certificate should I grant to which user, or even how to do this.

Any ideas?

Dallas Days of .NET – March 4-5

I am going to be at Dallas Days of .NET on March next year.  You can use the following link to get a discount if you order now: http://jointechies.eventbrite.com/?discount=OrenEini

This is going to be an interesting event, because there is one track in which I am going to be doing every other talk for 2 days. This is going to give me a wide enough scope to cover just about every topic that I am interested at, including some time to go in depth into several topics that I usually have the chance to only skim.


Published at

re: Diverse.NET

This post is a reply for this post, you probably want to read that one first.

Basically, the problem is pretty simple. It is the chicken & the egg problem. There is a set of problems where it doesn’t matter. Rhino Mocks is a good example where it doesn’t really matter how many users there are for the framework. But there are projects where it really does matters.

A package management tool is almost the definition of the chicken & egg problem. Having a tool coming from Microsoft pretty much solve this, because you get a fried chicken pre-prepared.

If you look at other projects, you can see that the result has been interesting.

  • Unity / MEF didn’t have a big impact on the OSS containers.
  • ASP.Net MVC pretty much killed a lot of the interest in MonoRail.
  • Entity Framework had no impact on NHibernate.

In NHibernate’s case, it is mostly because it already moved beyond the chicken & egg problem, I think. In MonoRail’s case, it was that there wasn’t enough outside difference, and most people bet on the MS solution. For Unity / MEF, there wasn’t any push to use something else, because you really didn’t depended on that.

In short, it depends :-)

There are some projects that really need critical mass to succeed. And for those projects, having Microsoft get behind them and push is going to make all the difference in the world.

And no, I don’t really see anything wrong with that.

It is an issue of traffic

I just had to respond to this post, Davy Brion talks about the Ruby community, and he had the following to say:

When i asked them about interesting resources to follow as a newbie Rubyist, they all gladly shared their suggestions. When i thanked them for it, they all replied stating that i should feel free to contact them if i had any more questions about whatever Ruby related. Seriously, can you imagine the few .NET heroes that we have responding to questions through email from people they don’t even know like that? I can’t. Hell, i know most of them don’t respond like that. The few that do are still trying to earn their MVP award or are too worried about renewing their MVP status.

Ignoring the MVP dig, allow me to explain exactly what is going on.

In the last 48 hours:









Those are all cold requests, from people I have never met, and all to my private email. Note that in most cases, there is a dedicated mailing list for the topic in question.

For that matter, the last two days has been decidedly quiet in the NHibernate front, this represent a more realistic sample of what is going on:


And those are in addition to the business, private, mailing list and other stuff that I do in email.

Putting it simply, there is too much traffic for me to welcome most cold questions with anything more than a direction to the appropriate mailing list. This isn’t about being rude, or uncaring, this is about actually being able to do any work at all.

JAOO 2010

I’ll be speaking in JAOO 2010, giving an Introduction to RavenDB in the NoSQL track. This is going to be the first time that I am going to show RavenDB in a major conference, and I am just a tiny bit nervous. This is going to be interesting, because I am going to present to people who are experienced in NoSQL solutions.

In addition to my talk (obviously the highlight of the entire conference :-) ), there are other sessions that I really want to be at:

  • Rx: curing your asynchronous programming blues - Erik Meijer. This is something that have been popping into my sights for a while, but never long enough to sit down and really study it. So I think I’ll take a shortcut through this session :-)

  • Lessons Learned in Large HTTP-Centric Systems – Jim Webber. There are two reasons to go to one of Jim’s talks. The first is the content, the second is the actual presentation style. Take a look at some of his talks to see what I means.

  • Building a Pet Store that will Survive Cyber - Cameron Purdy. This presentation interests me mostly because I don’t believe that what is suggest can be delivered (virtually unlimited scaling in a generic fashion), so it would be very interesting to see what is going on there.

  • Where to put data - Michael T. Nygard. I usually learn new things from Michael, so I’m looking forward to seeing what he has to say about this.

And the conference gods have actually managed to set things up so I’ll be able to be in all of those sessions, and not be busy giving a parallel session.

NHibernate Courses – London, UK – 26th April

I’ll be doing another run of my NHibernate course on the 26th April. We are talking about an intensive 3-day NHibernate workshop, where you will learn how to use NHibernate efficiently in your applications to save time and effort on communicating with database storage. The last course I gave was quite a success, even if I say so myself.

If you can’t make the 26th April, I’ll be giving the same course on the 17th May, again in London.

And, in between, we have Progressive.NET as well, 12th - 14th May, it was awesome last year, and I think it is going to be even more fun this year.


Published at

Lessons learned from building NHibernate Profiler – 24th Feb, London

Along with the NHibernate course that I’ll be giving in London next month, I’ll be doing a free session about lessons learned from building the NHibernate Profiler.

I am going to talk about architecture, internal design (including showing off the code), distributed team, release per commit, making technical decisions based on business concerns, building real world application infrastructure, etc.

This is a free event, but the number of places is limited, so please register in advance.