高性能key-value数据库nessDB介绍

日期: 2012-04-05 作者:nosqlfan 来源:TechTarget中国 英文

  nessDB是一个小巧、高性能、可嵌入式的key/value存储引擎,使用标准C开发,支持Linux, *BSD, OS X and Solaris等系统,无第三方库依赖。本文来自nessDB作者@BohuTANG 的投稿分享,推荐给大家。

  同时nessDB还提供一个服务端,支持Redis的 PING, SET, MSET, GET, MGET, DEL, EXISTS, INFO, SHUTDOWN 命令,您可以使用任何一款Redis客户端来连接和操作nessDB。

  整个引擎基于LSM-Tree思想开发,对随机写非常友好。为提高随机读,nessDB使用了Level LRU和Bloom Filter策略。

  nessDB结构介绍

  主要包括:Memory-Table,Sorted-Table(*.sst)、Meta和Log四大部分。

  1. Memory-Table 是个有序内存表,使用Skiplist实现。

  所有的添加/删除首先会写到这个内存表,当这个内存表达到一定数量后,进入immutable只读状态,后台线程开始对其进行merge操作。同时会新建一个内存表,继续接受添加/删除操作。

  Memory-Table数据结构如下:

   

  ‘key’:key数据

  ‘value-offset’:value在DB文件里的偏移地址

  ‘operation’:标识,是添加还是删除操作

  由于不存储value,可以对更多的数据进行缓存和排序,对随机写更友好(这点与levelDB不同)。

  nessDB同时最多有2个Memory-Table,一个处于可读写的active状态,另一个处于只读的immutable状态。

  2. Sorted-Table key有序存储的索引文件(*.sst)。每个sst索引文件默认存储25000条记录,任何两个sst索引文件没有区间重叠(也没有level之分,这点与levelDB不同)。

  一个sst索引文件结构如下:

   

  最后一行是个FOOTER结构,存储着当前索引文件最大的key(即last key),当前索引文件拥有的记录数目(count)和一个crc值。

  3. Meta 索引Meta信息表

  nessDB每次启动的时候,读取所有sst索引文件的FOOTER信息,组成一个内存索引meta信息表,结构如下:

   

  此meta信息表的作用是可根据key二分查找出所在的sst索引文件。

  4. Log

  log是Memory-Table在磁盘上的一个镜像,如果因为某种原因crash,下次重启时,nessDB会自动检测并进行数据恢复。

  性能

  这有个不太专业的性能测试报告:https://gist.github.com/2235147

  该测试基于: Linux 3.0.0内核,Ext4文件系统,CFQ调度器。

  如果您有兴趣,可以下载源码:

  ./make db-bench
  ./db-bench write 

  进行性能测试,不同机器结果会有差别。

  关于nessDB

  nessDB是一个开源项目,目前已有十多位代码贡献者,希望更多的人参与进来。

  源码地址:https://github.com/shuttler/nessDB

  最后

  希望使用B树开发自己NoSql产品的朋友,可以尝试下LSM-Tree,它思想朴素、简单,性能好。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

nosqlfan
nosqlfan

相关推荐