Ayende @ Rahien

It's a girl

Hidden Windows Gems: Extensible Storage Engine

Did you know that Windows came with an embedded database?

Did you know that this embedded database is the power behind Active Directory & Exchange?

Did you know that this is actually part of Windows' API and is exposed to developers?

Did you know that it requires no installation and has zero administration overhead?

Did you know there is a .Net API?

Well, the answer for all of that is that you probably didn't know that, but it is true!

The embedded database is called Esent, and the managed library for this API was just released.

This is an implementation of ISAM DB, and I have been playing around with it for the last few days. It isn't as nice for .Net developers as I would like it to be (but Laurion is working on that).

I think making this public is a great thing, and the options that this opens up are quite interesting. I took that for a spin and came up with this tiny bit of code that allow me to store JSON documents:

https://rhino-tools.svn.sourceforge.net/svnroot/rhino-tools/branches/rhino-divandb

It is not done, not nearly done, but the fact that I could rely on the embedded DB to do so made my life so much easier. I wish I knew about that when I played with Rhino Queues, it would have made my life so much simpler.

Comments

Mark
12/23/2008 12:36 PM by
Mark

I'm curious ... what do you think how complex is the task to create a ESENT backend for NHibernate? Is it even possible?

Justin Chase
12/23/2008 02:29 PM by
Justin Chase

How is this not just a relational registry? Is there some sort of isolation mechanism to separate processes from accessing each other's data?

configurator
12/23/2008 03:07 PM by
configurator

Wow, that's interesting. Can this be used as a normal relational database?

Ayende Rahien
12/23/2008 03:23 PM by
Ayende Rahien

Mark,

This is not a relational DB, NH assumes RDBMS.

Ayende Rahien
12/23/2008 03:40 PM by
Ayende Rahien

It is not registry, it is stored in a file, which you control

Ayende Rahien
12/23/2008 03:50 PM by
Ayende Rahien

Not really, this is a non relational store.

Chris Patterson
12/23/2008 03:55 PM by
Chris Patterson

Wow, the second I saw the word Jet I remembered this beast.

I wonder if it is still using the same original MS Access engine it was using before.

I'm curious to see how far you take it, but I remember many long nights trying to repair corrupt jet databases several years ago.

Ayende Rahien
12/23/2008 03:58 PM by
Ayende Rahien

Chris,

No, it is not the same API nor is it the same engine.

Different implementation that happen to share the same prefix, I am afraid.

configurator
12/23/2008 04:26 PM by
configurator

If the database can contain tables, what's stopping you from using it as a not-really-that-good database? Even Excel can be used as a relational database, can't it?

LukeB
12/23/2008 04:29 PM by
LukeB

Sounds like an embedded MultiValue database, like D3 or OpenQM

Ayende Rahien
12/23/2008 05:24 PM by
Ayende Rahien

Not really. It doesn't have SQL.

And it doesn't have joins.

It is literally structured storage. You get indexes, and the over experience is very similar to the one you get from BDB.

Scott White
12/23/2008 06:51 PM by
Scott White

Interesting, I would be more prone to use Sqlite since it's relational and deals with the same programming constructs that I am familiar with.

James Newton-King
12/23/2008 10:14 PM by
James Newton-King

Cool, Json.NET. Let me know how you get on with it

Seth
12/30/2008 04:45 PM by
Seth

If only someone would combine ESE with Firefox sqlite, shake and not crash

Comments have been closed on this topic.