(Note: This is from 2002 and has not been updated since. The code is buggy, do not use!)
The idea behind rdbm is to take cdb and put a journal before it. Then provide an abstraction layer that looks like ndbm(3) and writes updates to the journal. Read operations are answered by consulting the journal and the cdb file. The result should be a reasonably small yet crash-proof read-write database.
I implemented this in 1999. Part of the package is a server process and a network client abstraction layer that again looks like ndbm but consults the server for all operations, to provide multiple writing processes.
Unfortunately, the in-memory data structure I used for the journal back then was broken. Someone brought this to my attention in 2000, but I lost my uni account and couldn't update the old rdbm page. Since then, rdbm is pending a rewrite. Please don't use it before I rewrote it!
Here is a copy of the old pages.