Ever heard of HamsterDB?
If you’re not already doing so, HamsterDB is a database system you might want to be keeping a close eye on. It’s a transactional key-value store for embedded applications and is optimized for analytical data processing and not unlike a column-oriented database.
Developed and launched nine years ago by Christoph Rupp from Munich, HamsterDB is no newcomer on the scene. The database system enables encryption, compression and supports SIMD (Single Instruction Multiple Data) hardware architecture. It can also be used in C/C++ and offers connections for Erlang, Python, Java, .NET and Ada.
One particularly special feature is that the kind of key (e.g “strings” or “64 bit integers”) can be defined. Even keys with variable lengths such as duplicate keys can be supported.
The B-Tree of life
So how does it work? The data is stored on HamsterDB in a B-tree structure. C++ templates are implemented into the B-tree index. If transactions are approved, a “transaction tree” is created and the structure is stored In-Memory. With incoming transactions, updates are combined with an existing B-tree. Rejected transactions are simply deleted from the In-Memory structure.
What is particularly noteworthy is the nine year development of the data bank system on testability and automation, as Christoph Rupp reported in a recent blog post:
If I’ve learned any lessons I can offer, it’s that writing tests really can be fun if you see the benefits! And iterative development without reliable tests is simply impossible.
Hamster DB is licensed with Apache-2 and the latest version 2.1.8 can be downloaded from hamsterdb.com. A commercial version with plenty more useful functions is also available on the website.