高性能key-value数据库nessDB介绍
来源:互联网 发布:nginx正向代理配置 编辑:程序博客网 时间:2024/06/05 04:10
同时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数据结构如下:
keyvalue-offsetoperation- ‘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索引文件结构如下:
key1value1-offset(big-endian)key2value2-offset(big-endian)… more key and value offset …keyNvalueN-offset(big-endian)last-keycountcrc最后一行是个FOOTER结构,存储着当前索引文件最大的key(即last key),当前索引文件拥有的记录数目(count)和一个crc值。
3. Meta 索引Meta信息表
nessDB每次启动的时候,读取所有sst索引文件的FOOTER信息,组成一个内存索引meta信息表,结构如下:
begin keyend keysst file namesequential number… all the other items …此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 <count>
进行性能测试,不同机器结果会有差别。
关于nessDB
nessDB是一个开源项目,目前已有十多位代码贡献者,希望更多的人参与进来。
源码地址:https://github.com/shuttler/nessDB
最后
希望使用B树开发自己NoSql产品的朋友,可以尝试下LSM-Tree,它思想朴素、简单,性能好。
- 高性能key-value数据库nessDB介绍
- [转]高性能key-value数据库nessDB介绍
- 高性能key-value数据库
- Key-Value数据库高效并发读写性能介绍
- 超高性能 key-value 数据库
- redis:高性能key-value数据库,安装及主从配置(何志雄)
- 超高性能 key-value 数据库 Redis
- 超高性能 key-value 数据库 Redis
- 高性能Key/Value存储引擎levelDB, rocksDB, sessionDB
- 【数据库开发】Redis key-value内存数据库介绍
- 满足极高读写性能需求的Key-Value数据库
- 满足极高读写性能需求的Key-Value数据库
- nessDB
- Key-value系统介绍
- key-value数据库
- Key/Value数据库redis
- key-value数据库
- key-value数据库
- 输出三角形
- 在Windows8安装winpcap的问题
- VC----如何自动获取本机IP地址?
- PHP中redis的使用
- TWaver HTML5 继承结构和成员说明
- 高性能key-value数据库nessDB介绍
- 你与杰出工程师的差距
- 英语练习129 An accident
- NGUI v2.0 Interaction_4:UIButtonMessage UI按钮消息类
- VC 中TEXT、_T、L的区别
- Android之项目全局变量的定义
- Eclipse中10个最有用的快捷键组合
- C++实现迭代器模式
- VC中使用C内联汇编小例子