Berkeley DB is an embedded database system developed and supported by Sleepycat Software (http://www.sleepycat.com/). It is designed for applications which need transactional data storage, but don't need (or want) the additional structure that relational databases provide. It allows simple numeric or string-valued keys to be associated with a chunk of data, much like a persistent version of Ruby's native hash tables. However, unlike a hash, only a small amount of the data has to be in RAM at once -- Berkeley DB storages can be scaled into the many-GB range easily. Like most relational databases, it also supports atomic transactions and data recovery after crashes, as well as concurrent (more than one process or thread) access to a database. DBM, GDBM, and SDBM are all database formats (and libraries to access them) which, like Berkeley DB, allow simple key/value mappings to be saved to disk, and updated incrementally. However, each has various limitations as to data size per key, total database size, or performance on large datasets which Berkeley DB does not. None of them natively offer transaction support, or handle concurrent access to the same database gracefully. The advantage of the *DBM libraries is their simplicity; if your application uses less than 100,000 total keys, and doesn't need to store much data in each one, they may offer plenty of functionality, without requiring you to link in a large, complex library. More specifically to Ruby, it is worth noting that the *DBM libraries all have bindings included in the standard Ruby 1.8 distribution, while Berkeley DB requires you to install BDB, then compile and install the bindings. This is fine for some applications, but for quick "download-and-go" tools, it may be more dependencies than you want to introduce.