Delta Lake 学习笔记(四) - 名词解释
文章目录
1 Overview
在了解 Delta Lake 之前,我觉得有必要解释一下经常出现的一些名词,这里收集记录一下。如果跟我一样是菜鸡,可能你也需要看一下…
2 名词解释
2.1 ACID
ACID 就是指数据库事务的四个基本要素,对应的是原子性 Atomicity,一致性 Consistency,隔离性 Isolation 和持久性 Durability。
- 原子性: 一个事务要么全部成功,要不全部失败,事务出现错误会被回滚到事务开始时候的状态。
- 一致性: 系统始终处于一致的状态,所有操作都应该服务现实中的期望。
- 隔离性: 并发事务不会互相干扰,事务之间互相隔离。
- 持久性: 事务结束后就一直保存在数据库中,不会被回滚。
2.2 SNAPSHOT
An immutable snapshot of the state of the log at some delta version. Internally this class manages the replay of actions stored in checkpoint or delta files, given an optional starting snapshot.
SNAPSHOT 相当于当前数据的快照。这个快照包括的内容不仅仅只有一个版本号,还会包括当前快找下的数据文件,上一个 SNAPSHOT 的操作,以及时间戳和 DeltaLog 的记录。
2.3 MetaData
Updates the metadata of the table. Only the last update to the [[Metadata]] of a table is kept. It is the responsibility of the writer to ensure that any data already present in the table is still valid after any change.
这里是指 Delta Table 的元数据,包括 id,name,format,创建时间,schema 信息等等。
2.4 事务日志
Used to query the current state of the log as well as modify it by adding new atomic collections of actions. Internally, this class implements an optimistic concurrency control algorithm to handle multiple readers or writers. Any single read is guaranteed to see a consistent snapshot of the table.
事务日志的相关代码主要在 org.apache.spark.sql.delta.DeltaLog
中。后面会专门解释,前面文章也介绍过,这个是 Delta Lake 把对数据/表的操作的记录日志。
2.5 CheckSum
Stats calculated within a snapshot, which we store along individual transactions for verification.
可以说 CheckSum 是一个对象,里面包含了,当前 SNAPSHOT 下的表的物理大小,文件数,MetaData 的数量,协议以及事务的数量。这些信息会转成 Json 格式,存放在 CheckSumFile 中。
那么既然是一种校验的方式,那么他又是如何校验呢?方法很简单了,就是把写好的 CheckSumFile 读取,并对比前后的信息及可以完成校验的过程了。
校验文件是在 SNAPSHOT 的基础上计算的,会和各自的事务生死存亡。
2.6 Protocol
Used to block older clients from reading or writing the log when backwards incompatible changes are made to the protocol. Readers and writers are responsible for checking that the meet the minimum versions before performing any other operations.
Since this action allows us to explicitly block older clients in the case of a breaking change to the protocol, clients should be tolerant of messages and fields that they do not understand.
这个协议是用在 SNAPSHOT 中,比较不同版本的 Version 属性大小的,目的是标识 SNAPSHOT 的读/写版本号,来防止其他客户端读取旧的数据。
3 Summary
本文主要介绍了几个 Delta Lake 里需要知道的一些概念,尽管并不是些什么新概念,但是对于初学者还是很有必要去了解一下的(比如我…),后面会结合源码进行逐一的分析。
- 10万WordPress网站沦陷:恶意软件SoakSoak来了
- 自己动手实现一个Android Studio插件
- Oracle数据库漏洞分析:无需用户名和密码进入你的数据库
- Android动态加载入坑指南
- ModSecurity技巧:使用ssdeep检测Webshell
- 装饰者模式
- 经典算法学习之分治法(以排列、组合程序为例)
- Bash概论 - Linux系列教程补充篇
- 我母亲遭遇勒索软件CryptoWall的全过程
- Android浏览器跨域数据窃取和Intent Scheme攻击
- 关于React Native项目在android上UI性能调试实践
- 一文读懂如何用 Python 实现6种排序算法
- 三星KNOX远程静默安装漏洞深入分析报告
- 技术分享:MSSQL注入xp_cmdshell
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法