BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

分析型嵌入式键值数据库hamsterdb

| 作者 马德奎 关注 0 他的粉丝 发布于 2014年8月16日. 估计阅读时间: 4 分钟 | AICon 关注机器学习、计算机视觉、NLP、自动驾驶等20+AI热点技术和最新落地成功案例。

近日, 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中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT