LevelDb日知录之三 log文件
/* 版权声明:可以任意转载,转载时敬请标明:文章来自朗格科技*/
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文件相关推荐
- LevelDb日知录
目录 LevelDb日知录之一:LevelDb 简介 LevelDb日知录之二:整体架构 LevelDb日知录之三:log文件 LevelDb日知录之四:SSTable文件 LevelDb日知录之五: ...
- LevelDb日知录之二整体架构
LevelDb日知录之二整体架构 LevelDb本质上是一套存储系统以及在这套存储系统上提供的一些操作接口.为了便于理解整个系统及其处理流程,我们可以从两个不同的角度来看待LevleDb:静态角度和动 ...
- LevelDb日知录(Leveldb 实现原理)
转自:http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html 郑重声明:本篇博客是自己学习 Leveldb 实现原理时参考了郎格科技 ...
- 大数据日知录要点整理
大数据日知录要点整理 第0 章 当谈论大数据时我们在谈什么 1 NOSQL选型:kv-cassandra.dynamo,列式存储-HBase,图存储-Neo4j 社交网络数据存储适合用图数据库,而实 ...
- 博主新书:《大数据日知录:架构与算法》目录
<大数据日知录:架构与算法>目录 4目录编辑 第0 章 当谈论大数据时我们在谈什么................ 1 0.1 大数据是什么........................ ...
- 大数据日知录:架构与算法
大数据丛书 大数据日知录:架构与算法(大数据领域专家力作,专注大数据架构和算法,全面梳理大数据相关技术) 张俊林 著 ISBN 978-7-121-24153-6 2014年9月出版 定价:69. ...
- 大数据丛书 大数据日知录:架构与算法
大数据丛书 大数据日知录:架构与算法(大数据领域专家力作,专注大数据架构和算法,全面梳理大数据相关技术) 张俊林 著 ISBN 978-7-121-24153-6 2014年9月出版 定价:69. ...
- 《BIG DATA大数据日知录 架构和算法》读书笔记
2019独角兽企业重金招聘Python工程师标准>>> <BIG DATA大数据日知录 架构和算法>读书笔记 博客分类: 架构 分布式计算 1.数据分片和路由 Hash ...
- 《大数据日知录:架构与算法》前言
<大数据日知录:架构与算法>前言 像移动互联网.O2O.可穿戴设备等概念一样,"大数据"从甫一提出到飓风般席卷并风靡全球,从最初的技术名词到形成渗透各行各业的社会 ...
最新文章
- 中望CAD 2021中文版
- Quartz简单触发
- java se 动态添加视图组件_博为峰Java技术题 ——JavaSE Java Swing在顶层容器中添加菜单栏Ⅰ...
- python 之 click 包,设置命令行参数
- web.xml中的那些标签和意义
- SAP Spartacus Customizing Meta Tags
- java 正则匹配 sql星号,正则表达式匹配星号和换行符之间的字符串
- c#.winform,datagridview,数组,绑定,字符串,字符串数组绑定datagridview显示,长度,显示数组内容...
- 接口测试客户端的搭建
- 从无到有整合SpringMVC-MyBatis项目(1):搭建JavaWeb项目
- 2022电大国家开放大学网上形考任务-中华文化概说非免费(非答案)
- Altium Designer使用-----快速覆铜脚本的使用
- ectouch java_ectouch: 包含
ECTouch_v2.7.2_SC_UTF8
ECshop_v3.6.0_UTF8_release
ECShop_V4.0.0_UTF8
- 淘口令解析api接口_淘口令解析接口|淘口令还原接口|淘口令解密接口|淘口令转换网址接口...
- godaddy 域名转向指南
- 介数中心度与紧密中心度_将开发团队与技术紧密结合的6种方法
- 树形结构来了(了解)
- Ubuntu软件安装与卸载
- 风火家人:避风港湾;火泽暌:求同存异
- Unity3d 中 PlayerPrefs 保存数据的总结