自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

qinm的专栏

一步一个脚印。。

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

原创 leveldb之SkipList的简单实现

1、SkiplistSkipList是链表的变形,它在链表的基础上给每个元素增加了一个高度,且每个元素的高度是一个随机值,因此SkipList是一种随机化的数据结构。SkipList增、删查、改的效率都非常高,是一种典型的以空间换时间的存储方式。常规的链表如下: 而相同元素对应的SkipList结构如下: 由上可知,当要在链表中查找某个元素时,必须从链表头一个一个遍历,而在SkipList中查找

2015-04-30 11:27:05 991

原创 leveldb之WriteBatch

1、leveldb的写数据在leveldb中,我们通过调用db->Put(WriteOptions(),&key,&value);来写入数据,而WriteOptions只有一个变量sync,且默认初始值为false,因此leveldb默认的写数据方式是异步,即每将写操作提交将数据写入到内存中就返回,而将数据从内存写到磁盘的方式是异步的。异步写比同步写的效率高得多,但是当系统故障时,可能导致最近的更新

2015-04-28 20:49:08 6010 1

原创 leveldb之Arena

leveldb通过Arena类来进行内存的申请和管理。Arena类只是一个内存管理器,只负责申请内存和管理内存,不能进行内存的二次分配,因此不能将其看做是一个内存池。class Arena { public: Arena(); ~Arena();//生命周期结束后,统一释放所有block char* Allocate(size_t bytes); char* AllocateAlig

2015-04-28 10:41:27 722

转载 LevelDb之Compaction

前文有述,对于LevelDb来说,写入记录操作很简单,删除记录仅仅写入一个删除标记就算完事了,但是读取记录比较复杂,需要在内存以及各个层级文件中依照新鲜程度依次查找,代价很高。为了加快读取速度,levelDb采取了compaction的方式来对已有的记录进行整理压缩,通过这种方式,来删除掉一些不再有效的KV数据,减小数据规模,减少文件数量等。     levelDb的compaction机

2015-04-27 16:39:26 1797

原创 leveldb之log写操作

当应用要插入一条记录时,leveldb首先是将其写入到log中,若成功,则继续将其插入到memtable中。因此,当系统故障而memtable又没有来得及将数据存放到内存中,那么就可以通过log文件来恢复数据,保证数据不会丢失。 由于log的读比较复杂,因此将主要介绍log的写操作。在class DBImpl中主要有两个与log相关的成员变量:log::Writer* log_; 和

2015-04-27 16:00:27 2343 1

原创 leveldb之Put、Get操作

一个简单的leveldb使用示例如下:#include <assert.h>#include <iostream>#include "leveldb/db.h"#include "leveldb/env.h"using namespace std;#include <assert.h>#include <iostream>#include "leveldb/db.h"#include

2015-04-27 10:37:31 4154

原创 muduo学习笔记之time

1、timestampclass Timestamp : public muduo::copyable, public boost::less_than_comparable{ public: /// Constucts an invalid Timestamp. Timestamp() : microSecondsSinceEpoch_

2015-04-14 17:12:49 485

原创 muduo学习笔记之mutex

namespace muduo{// Use as data member of a class, eg.//// class Foo// {// public:// int size() const;//// private:// mutable MutexLock mutex_; //mutex_作为类成员,来保护类中的数据.声明为mutable,则mutex_

2015-04-14 15:02:29 968

原创 libevent中bufferevent.c中的部分函数使用

//bufferevent的初始化与释放int bufferevent_init_common(struct bufferevent_private *bufev_private,struct event_base *base,const struct bufferevent_ops *ops,enum bufferevent_options options){ //buffereven

2015-04-10 19:52:06 1560

原创 libevent中bufferevent的使用

以下面的bufferevent-test.c为例,在windows下单步调试,分析bufferevent的基本使用。#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <assert.h>#include <winsock2.h>#include <event2/event.h>#include <event2/e

2015-04-09 17:11:14 7132

转载 windows和linux套接字中的select机制浅析

转载自:http://www.cnblogs.com/lidabo/p/3804411.html先来谈谈为什么会出现select函数,也就是select是解决什么问题的?平常使用的recv函数时阻塞的,也就是如果没有数据可读,recv就会一直阻塞在那里,这是如果有另外一个连接过来,就得一直等待,这样实时性就不是太好。这个问题的几个解决方法:1. 使用ioctlsocket函

2015-04-02 15:05:25 1302

空空如也

空空如也

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

TA关注的人

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