写点什么

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

  • 2014-08-15
  • 本文字数:1236 字

    阅读完需:约 4 分钟

近日, 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 )关注我们,并与我们的编辑和其他读者朋友交流。

2014-08-15 03:192434
用户头像

发布了 256 篇内容, 共 91.6 次阅读, 收获喜欢 12 次。

关注

评论

发布
暂无评论
发现更多内容

解决:interface conversion: interface {} is float64, not int

liuzhen007

11月日更

21世纪什么最贵?“人才”看阿里大佬用一本书带你读懂TCP-IP协议

Java 程序员 后端

2021最新分享成功入职阿里巴巴(口碑部门)面经

Java 程序员 后端

2021美团高级工程师亲自汇总九大面试专题(附1000字解析)

Java 程序员 后端

2021阿里巴巴钻石级级“Docker全线笔记”新鲜出炉

Java 程序员 后端

Prometheus HTTP API 查询(四)Target 和查询结果格式

耳东@Erdong

Prometheus PromQL HTTP API 11月日更

2021金三银四,献给程序员从入门到放弃的 Java 架构师面试题

Java 程序员 后端

System.Text.Json 中的字符编码

喵叔

11月日更

2021社招阿里、腾讯、蚂蚁金服「4面」Java面试高频题分享

Java 程序员 后端

2021,你还在写“赤裸裸”的API吗?(1)

Java 程序员 后端

7月份了,再不准备金九银十就晚了,阿里2021最新数据结构与算法面试题手册

Java 程序员 后端

2021,你还在写“赤裸裸”的API吗?

Java 程序员 后端

588页!三个通宵学完这份“宝典”,4面斩获字节跳动offer

Java 程序员 后端

进击的Java(二)

ES_her0

11月日更

2021阿里大牛最新发布:Java高频面试题和核心技术(已涨薪6K)

Java 程序员 后端

22款终端生产力工具,效率飞起!

Java 程序员 后端

容器 & 服务:Helm Charts配置文件分析

程序员架构进阶

容器 Helm 11月日更 chart

【Promise 源码学习】第三篇 - 实现一个简版 Promise

Brave

Promise 11月日更

2021最新分享“天猫”面经:10万字大厂面试总结

Java 程序员 后端

2021最新分享字节四面成功拿Offer!

Java 程序员 后端

3 条掏心掏肺的建议,新手学习编程必备,快上车!

Java 程序员 后端

2021最新分享成功入职腾讯(后台开发岗)面经

Java 程序员 后端

2年Java,面试蚂蚁金服总结

Java 程序员 后端

22道Java Spring Boot高频面试题

Java 程序员 后端

4年Java程序员十面阿里终拿下offer,评级P6+年薪30-40w无股票

Java 程序员 后端

4月面试5月成功入职阿里,工作之余整理复盘:面试经历+备战经验分享!

Java 程序员 后端

Redis 6.0 新特性篇:多线程网络模型全面解密

码哥字节

redis 多线程 IO多路复用 11月日更

为什么区块链和加密资产对于实现元宇宙很重要?

CECBC

Android C++系列:认识JNI

轻口味

c++ android jni 11月日更

25 大 Java 后端面试指南,3000 道面试题解析

Java 程序员 后端

69-个经典-Spring-面试题和答案详解(下)

Java 程序员 后端

分析型嵌入式键值数据库hamsterdb_数据库_马德奎_InfoQ精选文章