可以说是不知天高地厚。。

可以说是班门弄斧。。

但是,我今天还就这样走了,我喜欢!!!!!!

注:后续文章,限于篇幅,不懂名词都有 紫色+下划线 超链接,有兴趣,可以查阅;

网上关于Leveldb 的源码剖析啊,解析啊什么的有好多,差不多都是大神级别的在搞,如果我们水平相当,那不如凑一对呗:

既然开始了,哪有停下的道理,先了解一下Levedb的关荣历史、完美现在和光辉的未来:

Leveldb:

1.Leveldb是一个google实现的非常高效的kv数据库,目前能够支持billion级别的数据量了。

在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计,特别是LMS算法。

2.LevelDB
是单进程的服务,性能非常之高,在一台4核Q6600的CPU机器上,

每秒钟写数据超过40w,而随机读的性能每秒钟超过10w。

3.LevelDB
只是一个 C/C++ 编程语言的库(有没有超级感动,哈)

4.Leveldb只是一个语言库,不包含网络服务封装,
所以无法像一般意义的存储服务器(如 MySQL)那样, 用客户端来连接它.

LevelDB
自己也声明, 使用者应该封装自己的网络服务器(这得等我学网络啦)

5.LevelDB具有很高的随机写,顺序读/写性能,但是随机读的性能很一般,

也就是说,LevelDB很适合应用在查询较少,而写很多的场景。

LevelDB应用了LSM (不懂吧,点这里)策略,lsm_tree(不懂吧,点这里)对索引变更进行延迟及批量处理,

并通过一种类似于归并排序的方式高效地将更新迁移到磁盘,降低索引插入开销。

6.key和value都是任意长度的字节数组;

7.entry(即一条K-V记录)默认是按照key的字典顺序存储的,当然开发者也可以重载这个排序函数;

8.提供的基本操作接口:Put()、Delete()、Get()、Batch();

9.支持批量操作以原子操作进行;

10.可以创建数据全景的snapshot(快照),并允许在快照中查找数据;

11.可以通过前向(或后向)迭代器遍历数据(迭代器会隐含的创建一个snapshot);

12.自动使用Snappy压缩数据;

13.可移植性;

以下是百度来的资料加一整理:如果了解,可以略过:

Jeff Dean其人:http://research.google.com/people/jeff/index.html

Google大规模分布式平台Bigtable和MapReduce主要设计和实现者。

Sanjay Ghemawat其人:http://research.google.com/people/sanjay/index.html

Google大规模分布式平台GFS,Bigtable和MapReduce主要设计和实现工程师。

LevelDb就是这两位大神级别的工程师发起的开源项目,简而言之,LevelDb是能够处理十亿级别规模Key-Value型数据持久性存储的C++程序库。正像上面介绍的,这二位是Bigtable的设计和实现者,如果了解Bigtable的话,应该知道在这个影响深远的分布式存储系统中有两个核心的部分:Master Server和Tablet Server。其中Master Server做一些管理数据的存储以及分布式调度工作,实际的分布式数据存储以及读写操作是由Tablet
Server完成的,而LevelDb则可以理解为一个简化版的Tablet Server。

LevelDb有如下一些特点:

首先,LevelDb是一个持久化存储的KV系统,和Redis这种内存型的KV系统不同,LevelDb不会像Redis一样狂吃内存,而是将大部分数据存储到磁盘上。

其次,LevleDb在存储数据时,是根据记录的key值有序存储的,就是说相邻的key值在存储文件中是依次顺序存储的,而应用可以自定义key大小比较函数,LevleDb会按照用户定义的比较函数依序存储这些记录。

再次,像大多数KV系统一样,LevelDb的操作接口很简单,基本操作包括写记录,读记录以及删除记录。也支持针对多条操作的原子批量操作。

另外,LevelDb支持数据快照(snapshot)功能,使得读取操作不受写操作影响,可以在读操作过程中始终看到一致的数据。

除此外,LevelDb还支持数据压缩等操作,这对于减小存储空间以及增快IO效率都有直接的帮助。

LevelDb性能非常突出,官方网站报道其随机写性能达到40万条记录每秒,而随机读性能达到6万条记录每秒。总体来说,LevelDb的写操作要大大快于读操作,而顺序读写操作则大大快于随机读写操作。

玩转Leveldb原理及源码--拙见1的更多相关文章

  1. springmvc工作原理以及源码分析(基于spring3.1.0)

    springmvc是一个基于spring的web框架.本篇文章对它的工作原理以及源码进行深入分析. 一.springmvc请求处理流程 二.springmvc的工作机制 三.springmvc核心源码 ...

  2. LevelDB(v1.3) 源码阅读之 Arena(内存管理器)

    LevelDB(v1.3) 源码阅读系列使用 LevelDB v1.3 版本的代码,可以通过如下方式下载并切换到 v1.3 版本的代码: $ git clone https://github.com/ ...

  3. LevelDB(v1.3) 源码阅读之 Slice

    LevelDB(v1.3) 源码阅读系列使用 LevelDB v1.3 版本的代码,可以通过如下方式下载并切换到 v1.3 版本的代码: $ git clone https://github.com/ ...

  4. OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波

    http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...

  5. ConcurrentHashMap实现原理及源码分析

    ConcurrentHashMap实现原理 ConcurrentHashMap源码分析 总结 ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现(若对Ha ...

  6. CopyOnWriteArrayList实现原理及源码分析

    CopyOnWriteArrayList是Java并发包中提供的一个并发容器,它是个线程安全且读操作无锁的ArrayList,写操作则通过创建底层数组的新副本来实现,是一种读写分离的并发策略,我们也可 ...

  7. Spark源码剖析(七):Job触发流程原理与源码剖析

    引言 我们知道在application中每存在一个action操作就会触发一个job,那么spark底层是怎样触发job的呢?接下来我们用一个wordcount程序来剖析一下job的触发机制. 解析w ...

  8. Spark源码剖析(八):stage划分原理与源码剖析

    引言 对于Spark开发人员来说,了解stage的划分算法可以让你知道自己编写的spark application被划分为几个job,每个job被划分为几个stage,每个stage包括了你的哪些代码 ...

  9. HashMap和ConcurrentHashMap实现原理及源码分析

    HashMap实现原理及源码分析 哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表, ...

随机推荐

  1. ORA-01940: cannot drop a user that is currently connected解决方法

    我们在删除数据库用户时候会碰到如下错误 SQL> DROP USER sys_xj cascade; DROP USER sys_xj cascade*ERROR at line 1:ORA-0 ...

  2. 【网络流24题22】最长k可重线段集问题

    题面戳我 sol 千万!千万!不要理解错题意了!最长K可重,不是说线段最多K可重!你以为计算几何? 原文:使得在\(x\)轴上的任何一点\(p\),\(S\)中与直线\(x=p\)相交的开线段个数不超 ...

  3. Vue-自带vue-resource插件实现http请求

    安装 本地环境安装路由插件vue-resource:    cnpm install vue-resource --save-dev *没有安装淘宝镜像的可以将 cnpm 替换成 npm 想要安装的可 ...

  4. Micropython Turnipbit 换挡风扇 旋转按钮控制直流电机转速

    学过物理学的我们都知道换挡风扇的原理,一般按钮控制电感分压或者电容分压,以达到控制电流的目的.那么我们可不可以使用Turnipbit模拟这个系统呢?其实是很简单的.类似于之前用Tpyboard做的智能 ...

  5. 【Spring源码分析】Bean加载流程概览

    代码入口 之前写文章都会啰啰嗦嗦一大堆再开始,进入[Spring源码分析]这个板块就直接切入正题了. 很多朋友可能想看Spring源码,但是不知道应当如何入手去看,这个可以理解:Java开发者通常从事 ...

  6. 关系型数据库工作原理-事务管理(二)(翻译自Coding-Geek文章)

    本文翻译自Coding-Geek文章:< How does a relational database work>. 原文链接:http://coding-geek.com/how-dat ...

  7. IE浏览器右键菜单插件开发(下篇)——如何用c#安装、卸载IE右键插件

    建立Installer安装类,如图: 代码如下: using Microsoft.Win32; using ResourceShare.UserClient.Common; using System; ...

  8. c#开发wps插件(2)

    上一篇,我们谈了插件开发原理,现在该是应用原理的时候了.工欲善其事必先利其器,首先安装wps 2016专业版,然后再开发. 第一步:打开vs2010,新建一个类库项目,项目结构如下: 说明:其中Res ...

  9. C++学习-6

    1.Auto无法区分常量变量,引用常量(顶层const被忽略了),不能识别引用变量,const和&都无法识别 Auto不能放在结构体内部 2.decltype()能识别引用,能获取常量属性,t ...

  10. jsp常用的jstl语法

    <c:forEach items="<object>" begin="<int>" end="<int>&q ...