levelDB简单认识

LevelDB是一个google实现的非常高效的kv数据库。它是一个c/c++编程语言的库,不包含网络服务封装,无法像一般的存储服务器(如MySQL)那样用客户端来连接它,使用者应该自己封装自己的网络服务器。

LevelDB是单进程的服务,能够支持billion级别的数据量,而且具有非常高的性能。写数据速度高达每秒过40W,随机读的性能就相对低一些。这是因为它的LSM存储引擎的设计思想:将对数据的修改增量保持在内存中,达到指定的大小限制后将这些修改操作批量写入磁盘。

LevelDB的基本框架

Memtable:db数据在内存中的的存储形式,采用skiplist实现。
Sstable:数据持久化文件,其size有限制最大值,sstable采用分层管理。db预定了最大的层级数。Sstable前一部分是由一个个block组成,后面是索引元信息(封装成FileMetaData)。
Log:日志文件,主要作用是用于系统崩溃恢复而不丢失数据,levelDB在写入内存前先将操作记录写入Log文件中,然后再写入内存(memtable)中。
Manifest:清单文件,主要存储的是sstable中key开始和结束的区间,在读操作时可以定位要读取的key在哪个sstable。
写操作:
先将数据同步到Log,再写入memtable,写完成同时SnapShot(当写入不为空时);当memtable的size到达阀值,memtable就会形成immutable memtable(只读memtable),同时生成新的memtable,后台compact会将只读存储表dump成sstable。第一次dump形成level 0,往后依次形成level1、level2…。Level0和其他层是有可能重叠的,其他层之间互不重叠。删除、修改都是写操作,删除是做标记,修改是写入和原来key一样的value,在最后sstable合并的时候才进行物理上的删除和修改。
这里写图片描述

读操作:
读数据时先去内存的memtable和immutable memtable查找;如果没有找到,根据索引文件manifest判断要找的key在哪个sstable中,然后先去cache中查找,未找到则在磁盘找,磁盘找到的sstable调入到cache中。
这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值