摘要:
在Leveldb中,用户可以将自定义的Cache逻辑传入Option中,默认使用的是LRU算法实现,下面是实现类图:其中LRUHandle是存放数据的nodeLRUCache实现具体的Insert,lookup等操作,而ShardedLRUCache中又实现分片包含多个LRUCache。HandleTable是自己实现的一个HashTable,官方说法是这个实现相较内部实现会有百分之五的提升。下面是主要操作的流程:Insert:1.根据hash结果由ShardedLRUCache选择相应的LRUCache2.将数据存入HashTable中,若空间不足则相应*23.如果是一个已存在的数据那么就根 阅读全文
摘要:
文件leveldb是根据单机版BigTable来实现的,但是文件的组织方式却有以下几点不同。每一个数据库是由存储在文件夹下面的一系列文件集合来实现的,有很多不同类型的文件:Log Files:log文件(*.log) 存储了一系列最近的更新。每一个更新都会追加到当前的log文件中。当一个log文件到达一个预设阈值(默认是4MB),它将会转变成一个有序表,并且为以后的更新操作生成一个新的log文件。sorted tables一个 sorted tables (*.sst) 存储一系列有序的key。每一个entry是一个key的value或者一个删除的key。sorted tables 由多级的方 阅读全文
摘要:
./include../leveldb../../db.h db.h 定义了基本的操作接口,包括 Put、Write、Delete等。这里Put,Write等接口用纯虚函数实现,但是却有默认实现。../../cache.h lebeldb 缓存的接口,用LUR算法实现,提供了添加、删除、查找等接口../../comparator.h 压缩算法接口../../env.h 环境设置,一些文件操作../../filter_policy.h 一些过滤的方式,定义了一系列接口,以供实现../../iterator.h 迭代器的一系列操作,包括First,end,seek等../.... 阅读全文