- 博客(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关注的人