
leveldb
令狐壹冲
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
leveldb学习笔记之一——clion调用leveldb使用示例
前言 2018年杀入区块链,算是接触了分布式、数据存储这一系列的知识,前段时间接触某手机厂商的技术人员,才发现自己在存储方面知识的不足,因此这段时间准备沉下心来学习学习。接下来就从leveldb开始,来研究研究其相关机制,不求看的人多,但求自勉而已。 而立未立,却又要进入人到中年的尴尬,但是不管到什么年级,对于一个it从业人员来说,提升技术都不可辜负! 工具选择 工欲善其事必先利其器,高效的工具能...原创 2019-03-14 11:26:53 · 2041 阅读 · 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 · 384 阅读 · 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 · 339 阅读 · 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 · 429 阅读 · 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 · 392 阅读 · 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 · 1776 阅读 · 0 评论 -
leveldb学习笔记之七——util/coding.h
coding.h中主要是与编码相关的内容,主要选取以下几个函数进行分析: EncodeFixed32 void EncodeFixed32(char* buf, uint32_t value) { if (port::kLittleEndian) { //小端次序直接使用memcpy memcpy(buf, &value, sizeof(value)); } else ...原创 2019-03-21 15:32:03 · 539 阅读 · 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 · 347 阅读 · 0 评论 -
leveldb学习笔记之二——源码目录结构
说明 从今天开始,将正式进入leveldb源码的学习。leveldb主要采用c++实现,整体代码比较规范,除了学习存储相关的原理,还可以学习c++相关的知识,提升c++的技巧。 目录 leveldb的目录结构如下: cmake:cmake的相关文件; db:主要逻辑的实现,也将是我们重点分析的地方; doc:文档; helpers/memenv:简单完全内存的文件系统,提供操作目录文件接口; i...原创 2019-03-15 13:45:19 · 875 阅读 · 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 · 752 阅读 · 0 评论 -
leveldb学习笔记之十一——include/leveldb/options.h
本节分析options.h文件。 压缩类型 //数据库内容存储在一组块中,每个块包含一个键、值对序列。 //在存储到文件中之前,可以压缩每个块。 //下面的枚举描述用于压缩块的压缩方法(如果有)。 enum CompressionType { kNoCompression = 0x0, kSnappyCompression = 0x1 }; options struct LE...原创 2019-04-03 16:23:46 · 669 阅读 · 0 评论