We have KiokuDB for Perl. It can store any Perl object graph (including closures; the code and the closed-over state), and it has full transactional semantics.
(And in fact, the transactional semantics are all on by default. If you load an object graph, do some stuff, and save the object graph in a transaction, it will abort if something else modified the data you read at the beginning of the transaction. This prevents you from silently overwriting new data with old data, which is something I did a lot before I knew how to turn this feature on.)
I have used KiokuDB extensively for the typical "web app" things, and it has worked wonderfully. Testing is simpler than with a "real database", and the application goes together much more cleanly. (No O<->R impedance mismatch, since everything is O.)
(And in fact, the transactional semantics are all on by default. If you load an object graph, do some stuff, and save the object graph in a transaction, it will abort if something else modified the data you read at the beginning of the transaction. This prevents you from silently overwriting new data with old data, which is something I did a lot before I knew how to turn this feature on.)
I have used KiokuDB extensively for the typical "web app" things, and it has worked wonderfully. Testing is simpler than with a "real database", and the application goes together much more cleanly. (No O<->R impedance mismatch, since everything is O.)