ESENT technology explained through Wikipedia

(All links go to the named Wikipedia article) ESE/ESENT is an embedded database engine providing ACID (Atomic, Consistent, Isolated, Durable) transactions with snapshot isolation using multi-version concurrency control and the ARIES variant of write-ahead logging for recovery. Transactions can have savepoints. An update can have optimistic concurrency control (i.e. a write-conflict isn’t detected until JetUpdate is called). Data and indexes are stored…

1

My post on the Windows SDK blog

Although the ESENT API has been available in the Windows SDK for several years, I don’t think enough people are aware of it. I have a blog post on the Windows SDK blog that gives an overview of ESENT and has a tiny ‘hello world’ program. http://blogs.msdn.com/windowssdk/archive/2008/10/23/esent-extensible-storage-engine-api-in-the-windows-sdk.aspx Hopefully more people will start using ESENT, instead…

2

Belated Introduction

Who: I’m Laurion Burchall, a Software Engineer on the Ese/Esent team. What: A blog about the Esent API. Why: Esent is an incredibly powerful embedded database engine that is part of Windows. It used by the Active Directory, Windows Desktop Search, Windows Update and several other windows clients. Microsoft Exchange uses a version of the…

1

Remember – JetRollback can close cursors

This is an ESENT programming error I’ve made a few times, watch out for this pattern:JET_TABLEID tableid = JET_tableidNil;JetBeginTransaction(sesid);JetOpenTable(sesid, dbid, “table”, &tableid, …);(do some stuff)if (success)    JetCommitTransaction(sesid, …);else    JetRollback(sesid);JetCloseTable(sesid, tableid); The problem is that the call to JetRollback closes the table before the JetCloseTable call. The easiest way to avoid this problem is to open…

0

JetSeek(sesid, tableid, 0) can cause a hang!

JetSeek() takes three parameters, a JET_SESID, a JET_TABLEID and a JET_GRBIT. With a lot of esent APIs that take a grbit, passing in 0 is a good way to get the default options, but JetSeek should never be called with a grbit of 0. The problem is that all the JetSeek options are non-zero (e.g….

2