leveldb
令狐壹冲
这个作者很懒,什么都没留下…
展开
-
leveldb学习笔记之一——clion调用leveldb使用示例
前言2018年杀入区块链,算是接触了分布式、数据存储这一系列的知识,前段时间接触某手机厂商的技术人员,才发现自己在存储方面知识的不足,因此这段时间准备沉下心来学习学习。接下来就从leveldb开始,来研究研究其相关机制,不求看的人多,但求自勉而已。而立未立,却又要进入人到中年的尴尬,但是不管到什么年级,对于一个it从业人员来说,提升技术都不可辜负!工具选择工欲善其事必先利其器,高效的工具能...原创 2019-03-14 11:26:53 · 1965 阅读 · 0 评论 -
leveldb学习笔记之十——leveldb/util/cache.cc
cache.cc中的代码是Cache的实现代码,其中主要涉及到LRUHandle、HandleTable、LRUCache以及ShardedLRUCache。它们与Cache的关系如下:ShardedLRUCache是抽象类Cache的实现,提供cache需要的相关功能。在一个ShardedLRUCache中有一个8个LRUCache的数组。每个LRUCache又由一个LRUHandle元素...原创 2019-04-02 17:43:30 · 339 阅读 · 0 评论 -
leveldb学习笔记之九——include/leveldb/cache.h
cache创建了一个给定尺寸的缓存,该缓存使用最近最少使用的逐出原则。源码如下:class LEVELDB_EXPORT Cache {public: Cache() = default; //设置默认构造函数 Cache(const Cache&) = delete; //禁止拷贝构造 Cache& operator=(const ...原创 2019-03-28 11:27:58 · 300 阅读 · 0 评论 -
leveldb学习笔记之八——include/leveldb/comparator.h
comparator是一个抽象类,它提供slice的比较,它必须是线程安全的,因为leveldb会从多个线程调用其中的方法。代码如下:class LEVELDB_EXPORT Comparator { public: virtual ~Comparator(); //比较的返回值: // "a" < "b",返回值小于0 // "a"=="b",返回值等于0 //...原创 2019-03-27 16:51:53 · 392 阅读 · 0 评论 -
leveldb学习笔记之四——include/leveldb/slice.h
在真正开始研究leveldb的存储过程之前,先来研究一下相关的结构,首先是slice。为了操作方便,leveldb将数据和长度包装成了slice使用,至于为什么要这么做,估计是两位大神是为了效率的提升,避免一些不必要的操作吧。class LEVELDB_EXPORT Slice {public: //创建一个空slice Slice() : data_(""), size_(0)...原创 2019-03-19 10:52:16 · 350 阅读 · 0 评论 -
leveldb学习笔记之三——include/leveldb/db.h
此文件为leveldb的c++接口文件,用c++的方式调用leveldb只需要包含此文件即可。在此文件中定义了leveldb对外的接口DB,其具体的实现由db/db_impl.h中的DBImpl类实现。DB的定义如下:class LEVELDB_EXPORT DB {public: //打开数据库 static Status Open(const Options& option...原创 2019-03-18 15:17:29 · 1703 阅读 · 0 评论 -
leveldb学习笔记之七——util/coding.h
coding.h中主要是与编码相关的内容,主要选取以下几个函数进行分析:EncodeFixed32void EncodeFixed32(char* buf, uint32_t value) { if (port::kLittleEndian) { //小端次序直接使用memcpy memcpy(buf, &value, sizeof(value)); } else ...原创 2019-03-21 15:32:03 · 512 阅读 · 0 评论 -
leveldb学习笔记之六——db/memtable.h
db数据在内存中的存储格式,写操作的数据都会先写到memtable中类class MemTable {public: //构造函数,不允许隐式转换,参数为内部key比较器 explicit MemTable(const InternalKeyComparator& comparator); //引用计数 void Ref() { ++refs_; } ...原创 2019-03-21 13:59:12 · 301 阅读 · 0 评论 -
leveldb学习笔记之二——源码目录结构
说明从今天开始,将正式进入leveldb源码的学习。leveldb主要采用c++实现,整体代码比较规范,除了学习存储相关的原理,还可以学习c++相关的知识,提升c++的技巧。目录leveldb的目录结构如下:cmake:cmake的相关文件;db:主要逻辑的实现,也将是我们重点分析的地方;doc:文档;helpers/memenv:简单完全内存的文件系统,提供操作目录文件接口;i...原创 2019-03-15 13:45:19 · 790 阅读 · 0 评论 -
leveldb学习笔记之五——include/leveldb/write_batch.h
WriteBatch主要是用来对多个数据进行批量写入。依赖关系writeBatch类主要依赖于以下几个类,如图:其中,Handler为抽象类,定义了put和delete接口。WriteBatchInternal类为writebatch的实现。MemTableInserter为Handler的具体实现,实现具体的put和delete操作。此处使用了抽象工厂模式,即Handler为抽象工厂,...原创 2019-03-19 15:07:00 · 709 阅读 · 0 评论 -
leveldb学习笔记之十一——include/leveldb/options.h
本节分析options.h文件。压缩类型//数据库内容存储在一组块中,每个块包含一个键、值对序列。//在存储到文件中之前,可以压缩每个块。//下面的枚举描述用于压缩块的压缩方法(如果有)。enum CompressionType { kNoCompression = 0x0, kSnappyCompression = 0x1};optionsstruct LE...原创 2019-04-03 16:23:46 · 627 阅读 · 0 评论