微信号:infoqchina

介绍:有内容的技术社区媒体

【工具】分析型嵌入式键值数据库hamsterdb

2014-08-18 20:35 InfoQ

近日, Christoph Rupp在highscalability.com上发表了一篇文章,介绍由他创建的分析型嵌入式键值数据库hamsterdb。它用C/C++编写,是一个速度非常快的轻量级NoSQL数据库引擎,支持事务、数据库游标、内存数据库和远程网络访问,类似谷歌的leveldb和甲骨文的BerkeleyDB。

据作者介绍,hamsterdb并不是细分市场上的一个新晋竞争者。事实上,它已经出现超过9年了。在这段时间里,它发展非常快,其重点已经从单纯的键值存储转向了分析型数据库,提供类似列式存储数据库的功能。

hamsterdb是单线程、非分布式的,用户通常直接将它链接到他们自己的应用程序中。它提供了独特的事务实现以及其它独特的功能,非常适合于分析型工作负载。它可以在本地C/C++中使用,也有面向Erlang、Python、Java、 .NET,甚至是 Ada的绑定。它被用在嵌入式设备和本地应用程序中,也可以为云实例提供缓存和索引服务,已经有数以百万计的部署。

hamsterdb有一个独特的功能,它能识别模式信息。大多数键值存储并不关心键的类型,而它支持两种类型的键:二进制键和数值键。hamsterdb数据库是BTree索引,既可以存储在文件中,也可以存储在内存中。而BTree的实现是它成为分析型数据库的关键。其实现方式非常紧凑,减少了I/O,而且可以更好的利用CPU缓存。

另外,hamsterdb有与SQL命令COUNT、COUNT DISTINCT、SUM和AVERAGE等价的API,并支持可变长度的键,允许键重复,以及支持read-committed隔离级别的ACID事务。

按照Rupp的说法,hamsterdb最强力的特性是可测试性。数据库的根本——甚至比性能都重要——就是不应该丢失数据。在9年的开发过程中,他不断地重写部分代码或者尝试新的想法,但高测试覆盖率给了他自信,认为这些更改不会破坏任何东西。他有大约1800个单元测试和35000个验收测试,以及一组模拟崩溃的测试,用于测试hamsterdb的可恢复性。这些测试都是高度自动化的。

Rupp还介绍了hamsterdb的商业版本hamsterdb pro。该版本提供了针对键、记录、日志的重量级压缩,AES加密,及针对叶节点查找的SIMD优化。还有更多的压缩算法正在进行或规划中。

在文章的最后,Rupp用谷歌的基准测试将hamster 2.1.8与leveldb 1.15作了性能对比。他得出了下面的结论:

对于随机读,hamsterdb性能要好于leveldb。对于随机写的情况,只要数据量不是太大,hamsterdb就更快。而从1千万键及以上开始,hamsterdb就会遭受BTree数据库的传统问题:大量的非序列性I/O和高磁盘寻道延迟。

作者认为,这可以很好地说明hamsterdb的分析能力。尤其是,sum和count运算都可以很好地扩展。序列性插入和扫描也是其亮点,不管数据量多大,它都可以非常快。

有兴趣的读者可以下载查看全部的测试结果,以及从GitHub上下载hamsterdb的源代码。


 
InfoQ 更多文章 Facebook如何实现PB级别数据库自动化备份 学术派Google软件工程师Matt Welsh谈移动开发趋势 Spotify为什么要使用一些“无聊”的技术? 妹纸们放假了,汉纸们做啥? 大多数重构可以避免
猜您喜欢 【技术交流】10种简单的Java性能优化 每周阅读清单:自定义Toast,应用分析报告,老罗 投稿 | 逢赌必赢的秘密 2015年中国压力最大公司TOP30 华为居首 出来做数值,迟早会碰到这三四件小事