自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 leveldb:write(如何处理并发写操作)

Put与Delete操作Status DB::Put(const WriteOptions& opt, const Slice& key, const Slice& value) { WriteBatch batch; batch.Put(key, value); return Write(opt, &batch);}Status DB::Delete(const WriteOptio

2017-09-29 14:07:33 5957

转载 C++11 右值引用和转移语义

新特性的目的右值引用 (Rvalue Referene) 是 C++ 新标准 (C++11, 11 代表 2011 年 ) 中引入的新特性 , 它实现了转移语义 (Move Sementics) 和精确传递 (Perfect Forwarding)。它的主要目的有两个方面:消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率。能够更简洁明确地定义泛型函数。左值与右

2017-09-26 22:41:11 246

转载 c++11:智能指针之weak_ptr

1、为什么需要weak_ptr?在正式介绍weak_ptr之前,解决shared_ptr的循环引用问题。C++11引入了weak_ptr,来打破这种循环引用。2、weak_ptr是什么?weak_ptr是为了配合shared_ptr而引入的一种智能指针,它指向一个由shared_ptr管理的对象而不影响所指对象的生命周期,也就是将一个weak_ptr绑定到一个shared_ptr不会改变share...

2017-09-23 16:33:54 777

转载 c++11:智能指针之unique_ptr

unique_ptr 不共享它的指针。它无法复制到其他 unique_ptr,无法通过值传递到函数,也无法用于需要副本的任何标准模板库 (STL) 算法。只能移动unique_ptr。这意味着,内存资源所有权将转移到另一 unique_ptr,并且原始 unique_ptr 不再拥有此资源。我们建议你将对象限制为由一个所有者所有,因为多个所有权会使程序逻辑变得复杂。因此,当需要智能指针用于纯 C+...

2017-09-23 16:12:02 1624

原创 c++11:智能指针之shared_ptr

c++11提供了三种智能指针:std::shared_ptr,std::unique_ptr和weak_ptr,使用时需要引用头文件< memory >shared_ptr共享的智能指针shared_ptr使用引用计数,每使用它一次内部引用计数加一,没析构一次,引用计数减一,减为0时释放所指向的堆内存。初始化可以通过以下三种方法初始化shared_ptr 构...

2017-09-23 15:10:49 1876

转载 C++字符串操作接口

选用C++标准程序库中的string类,是因为他和c-string比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。首先,为了在我们的程序中使用string类型,我们必须包含头文件 。如下: #include < stri...

2017-09-22 20:40:17 604

原创 leveldb:合并之DoCompactionWork(多文件间的合并)

再来分析DoCompactionWork前,我们先来熟悉几个与DoCompactionWork相关的数据结构Compactionclass Compaction { public: ~Compaction(); // 返回将要合并的层数,我们将level_与level_+1中冲突的文件合并到level_+1层 int level() const { return level_; } /

2017-09-22 16:55:32 1975

原创 leveldb:数据库recover机制

DBImpl::Recover把数据库恢复到上次退出的状态,Recover的基本功能是:首先是处理创建flag,比如存在就返回失败等等;然后是尝试从已存在的sstable文件恢复db;最后如果发现有大于原信息记录的log编号的log文件,则需要回放log,更新db数据。回放期间db可能会dump新的level 0文件,因此需要把db元信息的变动记录到edit中返回。Status DBImpl::Re

2017-09-19 14:12:33 3406 1

转载 leveldb:VersionSet

VersionSet 是version组成一个双向循环链表。class VersionSet{//. . . Env* const env_;// 操作系统封装 const std::string dbname_; const Options* const options_; TableCache* const table_cache_; const InternalKeyC

2017-09-15 14:26:40 1699

转载 leveldb:version分析

class Version { public: //生成iterator用于遍历 void AddIterators(const ReadOptions&, std::vector<Iterator*>* iters); //根据key来查询,GetStats记录了第一个读取的文件 struct GetStats { FileMetaData* seek_file;

2017-09-14 19:13:26 533

原创 leveldb:VersionEdit与MANIFEST文件

VersionEdit和MANIFEST文件到底是什么关系?VersionEdit会保存在MANIFEST文件中。VersionEdit就相当于MANIFEST文件中的一条记录。 VersionEdit是version对象的变更记录,用于写入MANIFEST文件。这样通过原始的version加上一系列的versionedit的记录,就可以恢复到最新状态。VersionEdit分析下面来看Versi

2017-09-14 11:32:26 1809

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除