Relational databases are only one option when it comes to storing your data. Depending on the actual case, it might be worth taking a look at a key-value store. If the data is stored and accessed mainly by a primary key, a key-value store might be a better option than the relational model. So, what are key-value stores? The name sounds awfully similar to the plain-old hash, and conceptually, it's just that.

Compared to a fully fledged RDBMS, key-value stores are much simpler, which is likely also the reason why there are so many competing implementations available. We take a look at Tokyo Cabinet and Moneta, a unified interface for different key-value stores.

Tokyo Cabinet is a C library that implements a very fast and space efficient key-value store:

The database is a simple data file containing records, each is a pair of a key and a value. Every key and value is serial bytes with variable length. Both binary data and character string can be used as a key and a value. There is neither concept of data tables nor data types. Records are organized in hash table, B+ tree, or fixed-length array.

Besides bindings for Ruby, there are also APIs for Perl, Java, and Lua available.

To share Tokyo Cabinet across machines, Tokyo Tyrant provides a server for concurrent and remote connections. For some examples and more information on Tokyo Cabinet, you might want to take a look at Ilya Grigorik's introductory article.

Suppose you have decided to use a key-value store, but don't want to decide on a specific implementation yet, Moneta might come in handy. It "aims to provide a unified interface for key/value stores", similar to what Rack does for web servers, and as Yehuda Katz explains, "libraries that want to provide sugar around key/value stores (e.g. Rails and Merb's caching support) can use Moneta as their backend".

Out of the box, Moneta supports a file store, memcache store, in-memory store, the xattrs in a file system, DataMapper, as well as the aforementioned Tokyo Cabinet (through rufus-tokyo, a "ruby-ffi based interface to Tokyo Cabinet and Tokyo Tyrant").

Read more about Moneta on Yehuda's blog or take a look at the github repository.