- 博客(10)
- 资源 (6)
- 收藏
- 关注
原创 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 298
原创 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 388
原创 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 510
原创 leveldb学习笔记之六——db/memtable.h
db数据在内存中的存储格式,写操作的数据都会先写到memtable中类class MemTable {public: //构造函数,不允许隐式转换,参数为内部key比较器 explicit MemTable(const InternalKeyComparator& comparator); //引用计数 void Ref() { ++refs_; } ...
2019-03-21 13:59:12 297
原创 leveldb学习笔记之五——include/leveldb/write_batch.h
WriteBatch主要是用来对多个数据进行批量写入。依赖关系writeBatch类主要依赖于以下几个类,如图:其中,Handler为抽象类,定义了put和delete接口。WriteBatchInternal类为writebatch的实现。MemTableInserter为Handler的具体实现,实现具体的put和delete操作。此处使用了抽象工厂模式,即Handler为抽象工厂,...
2019-03-19 15:07:00 702
原创 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 347
原创 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 1694
原创 leveldb学习笔记之二——源码目录结构
说明从今天开始,将正式进入leveldb源码的学习。leveldb主要采用c++实现,整体代码比较规范,除了学习存储相关的原理,还可以学习c++相关的知识,提升c++的技巧。目录leveldb的目录结构如下:cmake:cmake的相关文件;db:主要逻辑的实现,也将是我们重点分析的地方;doc:文档;helpers/memenv:简单完全内存的文件系统,提供操作目录文件接口;i...
2019-03-15 13:45:19 779
原创 leveldb学习笔记之一——clion调用leveldb使用示例
前言2018年杀入区块链,算是接触了分布式、数据存储这一系列的知识,前段时间接触某手机厂商的技术人员,才发现自己在存储方面知识的不足,因此这段时间准备沉下心来学习学习。接下来就从leveldb开始,来研究研究其相关机制,不求看的人多,但求自勉而已。而立未立,却又要进入人到中年的尴尬,但是不管到什么年级,对于一个it从业人员来说,提升技术都不可辜负!工具选择工欲善其事必先利其器,高效的工具能...
2019-03-14 11:26:53 1963
原创 c标准库总结
c标准库前言学习c语言十几年了,却从来没有完整的将c标准库看一看,我想在这一点上我是欠缺的。作为一个技术人员,无论什么时候都不能忘记自己最擅长的技能,这次借一个偶然的契机,翻一翻c标准库,希望以后自己在技术上越来越牛。说明c++库和c库包含相同的结构体的定义,其区别主要如下:每个头文件与c语言版本具有相同的名称,但是带有“c”前缀,没有扩展文件名。例如:c语言头文件&lt;stdio....
2019-03-14 10:28:54 10805 2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人