转自:http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html

有时间再好好看下整个文章!

说起LevelDb也许您不清楚,但是如果作为IT工程师,不知道下面两位大神级别的工程师,那您的领导估计会Hold不住了:Jeff Dean和Sanjay Ghemawat。这两位是Google公司重量级的工程师,为数甚少的Google Fellow之二。

  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日知录,估计您会了解其内在原因。

LevelDb本质上是一套存储系统以及在这套存储系统上提供的一些操作接口。为了便于理解整个系统及其处理流程,我们可以从两个不同的角度来看待LevleDb:静态角度和动态角度。从静态角度,可以假想整个系统正在运行过程中(不断插入删除读取数据),此时我们给LevelDb照相,从照片可以看到之前系统的数据在内存和磁盘中是如何分布的,处于什么状态等;从动态的角度,主要是了解系统是如何写入一条记录,读出一条记录,删除一条记录的,同时也包括除了这些接口操作外的内部操作比如compaction,系统运行时崩溃后如何恢复系统等等方面。

本节所讲的整体架构主要从静态角度来描述,之后接下来的几节内容会详述静态结构涉及到的文件或者内存数据结构,LevelDb日知录后半部分主要介绍动态视角下的LevelDb,就是说整个系统是怎么运转起来的。

LevelDb作为存储系统,数据记录的存储介质包括内存以及磁盘文件,如果像上面说的,当LevelDb运行了一段时间,此时我们给LevelDb进行透视拍照,那么您会看到如下一番景象:

图1.1:LevelDb结构

从图中可以看出,构成leveldb静态结构的包括六个部分,内存中的 memtable以及Immutable memtable,磁盘上的current文件,log文件,Manifest文 件,SSTable文件。存储流程如下所示:

  • 当插入一条key-value数据时,leveldb先将数据插入到log文件(追加)中,成功后 写入memtable中,既保证了高效写入,也保证了数据的稳定性
  • 当memtable插入的数据到了一个界限之后,会转为Immutable memtable, 由新的memtable支持写入操作.同时,leveldb在后台会通过调度程序将 Immutable memtable dump到磁盘上的sstable文件中。
  • sstable内部的数据是key有序的。由Immutable memtable不断dump出来的 sstable文件越来越多,会进行compact操作,形成新的level的sstable文件。

参考:http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html

转载于:https://www.cnblogs.com/bonelee/p/6208508.html

LevelDb简单介绍和原理——本质:类似nedb,插入数据文件不断增长(快照),再通过删除老数据做更新...相关推荐

  1. xgboost简单介绍_xgboost原理

    出处http://blog.csdn.net/a819825294 1.序 距离上一次编辑将近10个月,幸得爱可可老师(微博)推荐,访问量陡增.最近毕业论文与xgboost相关,于是重新写一下这篇文章 ...

  2. LevelDB整体介绍

    参考:http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html 1. leveldb简单介绍 说起LevelDb也许您不清楚,但是如果 ...

  3. Kaldi的简单介绍和基本使用说明

    Kaldi的简单介绍和基本使用说明 前言 一.ASR简介 1.语音识别系统 特征提取: 声学模型 发音词典 语言模型 语音解码 2. ASR项目 二.Kaldi简介 三.Kaldi项目的结构 四.Ka ...

  4. iOS开发UI篇—UITabBarController简单介绍

    iOS开发UI篇-UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarControlle ...

  5. 用c#算成绩的总和_C# 基础知识系列- 6 Lambda表达式和Linq简单介绍

    前言 C#的lambda和Linq可以说是一大亮点,C#的Lambda无处不在,Linq在数据查询上也有着举足轻重的地位. 那么什么是Linq呢,Linq是 Language Intergrated ...

  6. 文顶顶 iOS开发UI篇—UITabBarController简单介绍 iOS开发UI篇—UITabBarController简单介绍...

    一.简单介绍 UITabBarController和UINavigationController类似,UITabBarController也可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型的例 ...

  7. [面试]:能简单介绍下您现在所做项目和过程中的技术难点或有遇到瓶颈吗?

    思路转载自Hollis的知识星球,有兴趣的可以搜一下,很不错. 业务介绍: 1.痛点:解决的问题,用户痛点 2.正确性 3.可用性 4.大规模:量级 思考问题: 宏观,不局限于业务 这种问题直接回答高 ...

  8. jQuery的简单介绍

    jQuery的简单介绍 /* *JavaScript框架库:就是一个普通的js文件,封装了很多的函数,封装了很多兼容的代码 ​ *jQuery是JavaScript框架库中的一种 ​ *jQuery的 ...

  9. JAVA IO流的简单介绍

    文章目录 一.编码介绍 1. 字符集介绍 1.1 汉字存储和展示过程解析 2. Java默认编码 3. String编码 4. String解码 二.File类介绍 1. File类创建对象 2. 绝 ...

最新文章

  1. opencv-python处理图片的一些列操作之几何变换
  2. a标签禁止点击_Nofollow标签的使用
  3. SDN,你必须了解的基础知识【定期更新】
  4. 程序员的身价取决于手中产品
  5. dskinlite(uieasy mfc界面库)使用记录3:绘制动态元素(按钮控件通过隐藏方式修改图片显示)...
  6. hdu 5437 Alisha’s Party 优先队列
  7. 天超级计算机,2、天啦,古老的超级计算机!
  8. 使用mybatis的Vo对象简单完成需求查询
  9. 201771010112罗松《面向对象程序设计(java)》第十三周学习总结
  10. idea发现git出现cannot run git:cannot identify version of git executable :no response
  11. Java 正则表达式对用户名、手机号、邮箱等验证
  12. JavaScript学习笔记(条件判断)
  13. node-Buffer(缓冲区)文件写入
  14. 基于eNSP华为模拟器的VRRP简单实验
  15. 微信电话语音质量 VS VOLTE语音质量
  16. KMD驱动教程续-11
  17. 前端cookie的设置获取删除
  18. 大数据时代下的个人隐私
  19. C#毕业设计——基于C#+asp.net+sqlserver药店进销存管理系统设计与实现(毕业论文+程序源码)——进销存管理系统
  20. PPPOE拨号之七:华为防火墙 USG PPPoE拨号配置【针对Client+NAT工作常用方式与服务器】

热门文章

  1. vs2017开发php,C#编写的可供PHP调用的com dll(Visual studio 2017)
  2. arcgis js 移除某一个点_GIS Experience (二):ArcGIS实践操作问题集
  3. wangEditor编辑器在laravel中上传图片(二)
  4. 每天一个linux命令(2):cd命令
  5. linux开发教程,Java基础面试题(2)
  6. java state用法_Java状态模式(State模式)
  7. java程序设计编程题_20165237 2017-2018-2 《Java程序设计》第十周考试补做及编程题...
  8. 我的世界服务器老是显示已断开,为什么我的服务器玩家老是掉线 - 有问必答 - 最MC论坛 - 我的世界_Minecraft_联机_服主_资讯_MOD_皮肤_交流_作品_中文论坛...
  9. 如何判断链表是否有环_如何快速判断气门油封是否漏油?
  10. spring vo是什么_DO、VO、DTO...XXOO,你弄明白了么