/* 版权声明:可以任意转载,转载时敬请标明:文章来自朗格科技*/

LevelDb日知录之三 log文件

上节内容讲到log文件在LevelDb中的主要作用是系统故障恢复时,能够保证不会丢失数据。因为在将记录写入内存的Memtable之前,会先写入Log文件,这样即使系统发生故障,Memtable中的数据没有来得及Dump到磁盘的SSTable文件,LevelDB也可以根据log文件恢复内存的Memtable数据结构内容,不会造成系统丢失数据,在这点上LevelDb和Bigtable是一致的。

下面朗格科技带大家看看log文件的具体物理和逻辑布局是怎样的,LevelDb对于一个log文件,会把它切割成以32K为单位的物理Block,每次读取的单位以一个Block作为基本读取单位,下图展示的log文件由3个Block构成,所以从物理布局来讲,一个log文件就是由连续的32K大小Block构成的。

图3.1 log文件布局

在应用的视野里是看不到这些Block的,应用看到的是一系列的Key:Value对,在LevelDb内部,会将一个Key:Value对看做一条记录的数据,另外在这个数据前增加一个记录头,用来记载一些管理信息,以方便内部处理,图3.2显示了一个记录在LevelDb内部是如何表示的。

图3.2 记录结构

记录头包含三个字段,ChechSum是对“类型”和“数据”字段的校验码,为了避免处理不完整或者是被破坏的数据,当LevelDb读取记录数据时候会对数据进行校验,如果发现和存储的CheckSum相同,说明数据完整无破坏,可以继续后续流程。“记录长度”记载了数据的大小,“数据”则是上面讲的Key:Value数值对,“类型”字段则指出了每条记录的逻辑结构和log文件物理分块结构之间的关系,具体而言,主要有以下四种类型:FULL/FIRST/MIDDLE/LAST。

如果记录类型是FULL,代表了当前记录内容完整地存储在一个物理Block里,没有被不同的物理Block切割开;如果记录被相邻的物理Block切割开,则类型会是其他三种类型中的一种。我们以图3.1所示的例子来具体说明。

假设目前存在三条记录,Record A,Record B和Record C,其中Record A大小为10K,Record B 大小为80K,Record C大小为12K,那么其在log文件中的逻辑布局会如图3.1所示。Record A是图中蓝色区域所示,因为大小为10K<32K,能够放在一个物理Block中,所以其类型为FULL;Record B 大小为80K,而Block 1因为放入了Record A,所以还剩下22K,不足以放下Record B,所以在Block 1的剩余部分放入Record B的开头一部分,类型标识为FIRST,代表了是一个记录的起始部分;Record B还有58K没有存储,这些只能依次放在后续的物理Block里面,因为Block 2大小只有32K,仍然放不下Record B的剩余部分,所以Block 2全部用来放Record B,且标识类型为MIDDLE,意思是这是Record B中间一段数据;Record B剩下的部分可以完全放在Block 3中,类型标识为LAST,代表了这是Record B的末尾数据;图中黄色的Record C因为大小为12K,Block 3剩下的空间足以全部放下它,所以其类型标识为FULL。

从这个小例子可以看出逻辑记录和物理Block之间的关系,LevelDb一次物理读取为一个Block,然后根据类型情况拼接出逻辑记录,供后续流程处理。

接下来是广告时间,后面还有更精彩的内容等着您,请您马上离开,不要回来,敬请期待下节内容:LevelDb日知录之四(SSTable文件)。

转载: http://www.samecity.com/blog/Article.asp?ItemID=92

LevelDb日知录之三 log文件相关推荐

  1. LevelDb日知录

    目录 LevelDb日知录之一:LevelDb 简介 LevelDb日知录之二:整体架构 LevelDb日知录之三:log文件 LevelDb日知录之四:SSTable文件 LevelDb日知录之五: ...

  2. LevelDb日知录之二整体架构

    LevelDb日知录之二整体架构 LevelDb本质上是一套存储系统以及在这套存储系统上提供的一些操作接口.为了便于理解整个系统及其处理流程,我们可以从两个不同的角度来看待LevleDb:静态角度和动 ...

  3. LevelDb日知录(Leveldb 实现原理)

    转自:http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html 郑重声明:本篇博客是自己学习 Leveldb 实现原理时参考了郎格科技 ...

  4. 大数据日知录要点整理

    大数据日知录要点整理 第0 章 当谈论大数据时我们在谈什么 1  NOSQL选型:kv-cassandra.dynamo,列式存储-HBase,图存储-Neo4j 社交网络数据存储适合用图数据库,而实 ...

  5. 博主新书:《大数据日知录:架构与算法》目录

    <大数据日知录:架构与算法>目录 4目录编辑 第0 章 当谈论大数据时我们在谈什么................ 1 0.1 大数据是什么........................ ...

  6. 大数据日知录:架构与算法

    大数据丛书 大数据日知录:架构与算法(大数据领域专家力作,专注大数据架构和算法,全面梳理大数据相关技术) 张俊林 著   ISBN 978-7-121-24153-6 2014年9月出版 定价:69. ...

  7. 大数据丛书 大数据日知录:架构与算法

    大数据丛书 大数据日知录:架构与算法(大数据领域专家力作,专注大数据架构和算法,全面梳理大数据相关技术) 张俊林 著   ISBN 978-7-121-24153-6 2014年9月出版 定价:69. ...

  8. 《BIG DATA大数据日知录 架构和算法》读书笔记

    2019独角兽企业重金招聘Python工程师标准>>> <BIG DATA大数据日知录 架构和算法>读书笔记 博客分类: 架构 分布式计算 1.数据分片和路由 Hash ...

  9. 《大数据日知录:架构与算法》前言

       <大数据日知录:架构与算法>前言 像移动互联网.O2O.可穿戴设备等概念一样,"大数据"从甫一提出到飓风般席卷并风靡全球,从最初的技术名词到形成渗透各行各业的社会 ...

最新文章

  1. 中望CAD 2021中文版
  2. Quartz简单触发
  3. java se 动态添加视图组件_博为峰Java技术题 ——JavaSE Java Swing在顶层容器中添加菜单栏Ⅰ...
  4. python 之 click 包,设置命令行参数
  5. web.xml中的那些标签和意义
  6. SAP Spartacus Customizing Meta Tags
  7. java 正则匹配 sql星号,正则表达式匹配星号和换行符之间的字符串
  8. c#.winform,datagridview,数组,绑定,字符串,字符串数组绑定datagridview显示,长度,显示数组内容...
  9. 接口测试客户端的搭建
  10. 从无到有整合SpringMVC-MyBatis项目(1):搭建JavaWeb项目
  11. 2022电大国家开放大学网上形考任务-中华文化概说非免费(非答案)
  12. Altium Designer使用-----快速覆铜脚本的使用
  13. ectouch java_ectouch: 包含 ECTouch_v2.7.2_SC_UTF8 ECshop_v3.6.0_UTF8_release ECShop_V4.0.0_UTF8
  14. 淘口令解析api接口_淘口令解析接口|淘口令还原接口|淘口令解密接口|淘口令转换网址接口...
  15. godaddy 域名转向指南
  16. 介数中心度与紧密中心度_将开发团队与技术紧密结合的6种方法
  17. 树形结构来了(了解)
  18. Ubuntu软件安装与卸载
  19. 风火家人:避风港湾;火泽暌:求同存异
  20. Unity3d 中 PlayerPrefs 保存数据的总结

热门文章

  1. windbg符号表路劲设置成功后没有自动下载
  2. Python入门练习“问答闯关游戏设计一”
  3. mysql默认锁机制是什么_MySQL中锁机制的原理是什么
  4. Ubuntu server xfce 配置vnc
  5. gcc prefix小结
  6. 阿里云centOS7.4 ftp连接不上的问题
  7. php 点号作用,探讨:PHP中逗号与点号的区别
  8. 2020视频面试大型翻车现场
  9. 基于LeNet5实现交通标志分类任务
  10. 【无标题】楔子第一章