国科大大数据课程复习笔记(1)

个人复习笔记Mark,图片内容大多来自老师提供ppt,感谢大数据课的陈老师、孙老师的辛苦授课~

目录

1 大数据背景与趋势

1.1 计算机硬件的发展

1.2 数据管理系统的发展

1.3 大数据的挑战

1.4 大数据管理系统

2 关系型数据管理系统

2.1 关系型数据模型

(1)Table/Relation (表)

(2)Key(键)

2.2 关系型运算 & SQL语言

2.3 数据库系统架构

(1)概述

(2)RDBMS系统架构(单机)

2.4 数据存储与访问

2.5 运算的实现

(1)Operator tree

(2)Selection & Projection

(3)Join(三种思路)

2.6 事务处理

(1)事务(Transaction)

(2)ACID:DBMS保证事务的ACID性质

(3)Concurrency Control (并发控制)

(4)Crash Recovery (崩溃恢复)

2.7 数据仓库

(1)OLAP

(2)行式与列式数据库

2.8 分布式数据库

(1)系统架构

(2)分布式事务处理:事务读写的数据分布在不同机器上,代价昂贵


1 大数据背景与趋势

1.1 计算机硬件的发展

        晶体管数量-摩尔定律,指数级增加

  • CPU体系结构发展
    • 2005年以前-提高主频,功耗、散热等限制主频的进一步增加
    • 转向核的增加:单核单线->多核多线->众核
    • 多种类型的处理器:GPU/ARM/…
  • 存储层次结构
    • 外存(硬盘、闪存)->DRAM内存->L3缓存->L2缓存->L1缓存->寄存器   =>速度快,容量低,价格高
    • 内存:容量符合摩尔定律,带宽有一定的方法增加,访问速度比指令执行慢100倍
    • 硬盘:容量指数级增加,性能(访问速度慢,带宽受限于盘片转速,顺序访问比随机访问好)
    • 固态:以闪存为存储介质,随机读性能、顺序读写性能优于机械,但随机写性能差

1.2 数据管理系统的发展

  • 关系型数据库(1970-1980)
    • 第一个关系型数据库:System R
    • 事务处理(Transaction Processing)
      • 大量并发用户,少量随机读写操作
      • 典型:银行业务,订票,购物等
  • 数据仓库:读取大量数据的分析操作 1990
  • 数据流处理、GIS、多媒体数据库等 2000
  • 大数据 2010

1.3 大数据的挑战

  • 三个重要概念&挑战
    • 数据量巨大 Volume
    • 数据的产生速度、更新速度快  Velocity
    • 数据种类繁多 Variety

1.4 大数据管理系统

国科大大数据课程复习笔记(1)

2 关系型数据管理系统

2.1 关系型数据模型

(1)Table/Relation (表)

  • Column 列
    • 一个属性,有明确的数据类型
    • 必须是原子类型,不可再分,无内部结构
  • Row 行
    • 一个记录,记录之间无序
  • 表型瘦长,列数较少,行数成千上万
  • 原子类型:无内部嵌套结构
    • Int,Double,Char…及Int基础上表达类型(Date等)
  • 数学定义
    • 国科大大数据课程复习笔记(1)
  • Schema vs Instance
    • Schema:类型,只需定义一次
    • Instance:具体取值,每列具体值

(2)Key(键)

  • 特殊的列
  • 用处:取值唯一,唯一确定一个记录
  • Primary Key:主键,唯一确定本表中的一个纪录(例如学生信息表的ID,选课信息表中学生ID和课程ID的组合)
  • Foreign Key:外键,是另一个表的主键,唯一确定另一个表的一个记录(例如选课信息表的学生ID和课程ID),可理解为指针或引用

2.2 关系型运算 & SQL语言

        SQL:主流的关系型数据库语言

  • 一般运算
    • SQL Create Table +声明主键、外键

国科大大数据课程复习笔记(1)国科大大数据课程复习笔记(1)

  • SQL Insert
    • 插入完整记录
      • 国科大大数据课程复习笔记(1)
    • 插入特定列
      • 国科大大数据课程复习笔记(1)
  • SQL Delete
    • 国科大大数据课程复习笔记(1)

 

  • SQL Update
    • 国科大大数据课程复习笔记(1)
  • 主要关系运算
    • Selection 选择
      • 从一个表中提取一些行
      • 国科大大数据课程复习笔记(1)
    • Projection 投影
      • 从一个表中提取一些列

国科大大数据课程复习笔记(1)

=>SQL 选择+投影

国科大大数据课程复习笔记(1)

 

  • Join 连接(等值连接 Equi-join)
    • R表中的a列与S表中的b列,找到两个表中互相匹配的记录
    • 国科大大数据课程复习笔记(1)
  • Group by 分组统计
    • 国科大大数据课程复习笔记(1)

国科大大数据课程复习笔记(1)

  • Having 在group by基础上选择
    • 国科大大数据课程复习笔记(1)
  • Order by 排序
    • 国科大大数据课程复习笔记(1)
    • desc (descending 减少)表示从大到小排序;asc (ascending 增加) 表示从小到大排序
  • 如何计算平均成绩?
    • 国科大大数据课程复习笔记(1)
    • 国科大大数据课程复习笔记(1)

2.3 数据库系统架构

(1)概述

  • DBMS(Database Management System)数据库管理系统
    • RDBMS (Relational Database Management System) 关系型数据库管理系统
    • 目前主流的三大商用系统:Oracle, Microsoft SQL Server, IBM DB2
    • 通常的系统为典型的Client/Server

(2)RDBMS系统架构(单机)

  • 国科大大数据课程复习笔记(1)
  • 前端:思考用户需求
    • SQL Parser:将SQL语句的程序变为解析好的内部表达
      • 语法解析,语法检查,表名、列名、类型检查
    • Query Optimizer:将SQL内部表达变为执行方案(Query Plan)
      • 产生可行的执行方案,估计其运行时间和空间代价,并在多个方案中选择最佳
  • 后端:如何存数据、完成运算
    • Execution Engine :将执行方案转为SQL语句的结果
      • 根据执行方案完成相应的运算和操作,数据访问,关系型运算的实现
    • Buffer Pool :在内存中缓存硬盘数据
    • Data storage and indexing : 在硬盘上存储数据 & 高效访问数据
    • Transaction management:事务管理
      • 实现ACID,进行logging写日志,locking加锁,保证并行Transaction事物的正确性

2.4 数据存储与访问

  • 数据库 vs 文件系统
    • 国科大大数据课程复习笔记(1)
  • 数据在硬盘上的存储
    • 硬盘最小存储访问单位:一个扇区512b
      • 文件系统访问硬盘单位:4kb
        • RDMS最小存储单位:database page size,可设置为1至多个文件系统的page,例如4、8、16kb
    • Page
      • 内部结构:page header,slot and tuples ->方便存储变长的记录,记录超出页面大小需要特殊处理
      • Tuple结构

国科大大数据课程复习笔记(1)

<center>tuple长度 |变长的列的起始地址 |定长的列的内容 |变长的列的内容

<center>eg:

国科大大数据课程复习笔记(1)

 

国科大大数据课程复习笔记(1)

  • 索引
    • 数据的顺序访问:顺序读取表的每个page->顺序访问page的每个tuple->检查条件成立与否->成立的读取对应内容
    • 有选择性的访问:使用索引index
      • Tree based index:有序,支持点查询和范围查询
      • Hash based index:无序,只支持点查询
    • 链式哈希表 Chained Hash Table
      • H(hey) % size (H是对key位运算产生一个整数,size是hash表中header数组的元素个数)
      • 在硬盘上存储时,bucket =page
    • B+树
  • 国科大大数据课程复习笔记(1)

国科大大数据课程复习笔记(1)

 

  • 叶子节点

 

国科大大数据课程复习笔记(1)

 

国科大大数据课程复习笔记(1)

  • 内部节点

国科大大数据课程复习笔记(1)

 

国科大大数据课程复习笔记(1)

  • Search

国科大大数据课程复习笔记(1)

国科大大数据课程复习笔记(1)

 

国科大大数据课程复习笔记(1)

  • Insertion

国科大大数据课程复习笔记(1)

国科大大数据课程复习笔记(1)

 

国科大大数据课程复习笔记(1)

  • Deletion
    • 国科大大数据课程复习笔记(1)
  • Range Scan
    • 国科大大数据课程复习笔记(1)
  • Clustered index(主索引)与 Secondary index(二级索引)
  • Clustered: 记录就存在index中,记录顺序就是index顺序
  • Secondary: 记录顺序不是index顺序,index中存储page ID 和in-page tuple slot ID
  •  
  • 比较顺序访问&二级索引访问
    • 顺序访问:需要处理每一个记录,顺序读每一个page
    • 二级索引访问:有选择的处理记录,随机读相关的page
    • 如何选择:由选中多大比例的记录决定,根据预测的selectivity、硬盘顺序读和随机读的性能,估算两种方式的执行时间,最终选时间小的方案->query optimizer的一个任务
  • Buffer Pool:用于提高性能,减少I/O

国科大大数据课程复习笔记(1)

  • 数据访问局部性
    • 时间局部性:同一个数据元素可能会在一段时间内多次被访问 ->Buffer pool
    • 空间局部性:位置相近的数据元素可能会被一起访问 ->Page为单位读写
  • 组成
    • 内存空间分成page大小的单元->frame,每个frame可以缓冲硬盘中的一个page
    • 如果一个page在缓冲池中,可直接访问,节省了i/o操作;不在则找到一个可用的frame,读取page后放入
  • Replacement 替换
    • 如果没有空闲frame,需要找到一个已缓存的page(victim page)替换掉;如果page被修改,需要写回硬盘
    • 如何选择victim?->替换策略
    •                                                    国科大大数据课程复习笔记(1)

          常见替换策略:

        国科大大数据课程复习笔记(1)

    • LRU
      • 实现方法1:Buffer Head记录访问时间戳,令时间戳最早的页为victim ->问题:替换操作O(N)
      • 实现方法2:当一页被访问时,将其移动到最前端,令最后一个page为victim ->代价O(1),但存在修改队列和代价和多线程共享队头的问题
      • Clock算法
      • 数据结构:Buffer Head记录R,取值为01
      • 访问一个页时,令R=1;替换时,顺时针旋转查看下一页,如果R为1则令R=0并继续旋转,如果R为0则选中为victim

 

                                                        国科大大数据课程复习笔记(1)国科大大数据课程复习笔记(1)

2.5 运算的实现

(1)Operator tree

国科大大数据课程复习笔记(1)

 

(2)Selection & Projection

国科大大数据课程复习笔记(1)

(3)Join(三种思路)

  • Nested loop
    • 最早

国科大大数据课程复习笔记(1)

国科大大数据课程复习笔记(1)

 

  • Block Nested Loop

国科大大数据课程复习笔记(1)

  • Index Nested Loop

国科大大数据课程复习笔记(1)

  • Hashing
    • Simple hash join:读R建立哈希表,读S访问表找到所有的匹配
    • 如果R比内存大->I/O partitioning,将R和S划分为小块,
      • PartitionID = hash(join key) % PartitionNumber
        • Rj中记录的匹配只存在于相应的Sj中
    • Grace hash join:对R和S进行I/O partitioning,对于每个Partition进行simple hash join

国科大大数据课程复习笔记(1)

  • Sorting
    • 思路:将R按照R.a顺序排序,S按照S.b顺序排序,可Merge找出所有匹配

                             国科大大数据课程复习笔记(1)国科大大数据课程复习笔记(1)

 

国科大大数据课程复习笔记(1)

国科大大数据课程复习笔记(1)

2.6 事务处理

大量并发用户,少量随机读写操作

(1)事务(Transaction)

             一个事务可能包含多个操作(select、insert等),事务中的所有操作满足ACID性质

             表现形式:一般每个SQL语句被认为是一个事务,或者引入特殊语句(begin transaction等)则为一组语句

(2)ACID:DBMS保证事务的ACID性质

  • Atomicity(原子性):要么完全执行,要么完全没执行
  • Consistency(一致性):从一个正确状态转换到另一个正确状态
  • Isolation(隔离性):每个事务与其它并发事务互不影响
  • Durability(持久性):Transaction commit后,结果持久有效,crash也不消失

(3)Concurrency Control (并发控制)

  • 数据竞争:不同的执行顺序会导致不同的结果->写读:读脏结果

                                                                                   读写:不可重复读

                                                                                   写写:更新丢失

  • 如何判断一组事务正确执行?->Serializable(可串行化),判断一组并行Transactions是否正确执行的标准

国科大大数据课程复习笔记(1)

  • 解决方案:采用机制保证数据竞争不会出现或提交前检查存在数据竞争与否
    • 加锁:2 Phase Locking 两阶段加锁->有一个集中的加锁阶段和一个集中的解锁阶段

国科大大数据课程复习笔记(1)

                          国科大大数据课程复习笔记(1)  读写的锁不同

国科大大数据课程复习笔记(1)

国科大大数据课程复习笔记(1)                                     锁的粒度不同

国科大大数据课程复习笔记(1)

                                       国科大大数据课程复习笔记(1) 死锁

                                            重要条件:循环等待,多个事务相互等待

                                            处理:1->死锁避免:人为规定顺序,对数据库系统不适用

                                                       2->死锁检测:周期性检测,存在则选一个杀掉

国科大大数据课程复习笔记(1)

 

  • 不采用加锁:分为读、验证、写三个阶段。决定提交时,检查是否有冲突,存在则终止事务,清空私有工作区;不存在则验证通过
  • 优点:冲突较少时没有加锁的开销
  • 缺点:冲突很多时,需要不断重试,浪费大量资源,甚至无法前进
  • Snapshot Isolation 快照 : 提交时检查冲突,有则回到上一个快照

                                    在某些情况下,并不是可串行化的

(4)Crash Recovery (崩溃恢复)

  • Transaction commit后,结果持久有效,crash不消失
  • 解决方案->WAL (Write Ahead Logging)
    • 事务日志记录(记录写操作)、commit日志记录(提交操作)、abort日志记录(回滚操作)->日志记录按LSN顺序被追加到日志文件末尾
    • Write-Ahead:总是先写日志,再去做实际操作
    • 如何保证持久度Durability:条件为日志是持久的,可根据日志确定所有操作
    • 国科大大数据课程复习笔记(1) 如何实现?保证日志记录先于修改后的数据出现在硬盘上

国科大大数据课程复习笔记(1)

 

国科大大数据课程复习笔记(1)

  • Checkpoint(检查点):使崩溃时间可控,内容包括
    • 当前活动的事务表:包括事务的最新日志的LSN
    • 当前脏页表:每个页最早的尚未写回硬盘的LSN
    • Log Truncation:如果LSN之前的所有日志记录都不需要了,那么就可以删除LSN之前的Log
  • Crash Recovery:分析阶段->Redo阶段(将系统恢复到未崩溃前)->Undo阶段(清除未提交事务的修改)

2.7 数据仓库

读取大量数据的分析操作

(1)OLAP

         Online Analytical Processing(联机分析处理),在数据仓库的基础上实现的

  • 基本数据模型:多维矩阵->data cube
  • 基本操作:roll up(date to week)、drill down(week to date)、slice(choose x month)、dice(choose many months)

(2)行式与列式数据库

  • 行式数据存储:每个记录中把所有的列相邻地存放
    • 优点:多个列的值,可以一次I/O都得到;适合于OLTP,同时需要读写同一个记录的多个列的值
    • 缺点:对于数据分析操作,只使用少数列
  • 列式数据存储:每个列产生一个文件,存储所有记录中该列的值
    • 优点:降低读的数据量;每个文件存储相同数据类型的值,具有更高压缩比
    • 缺点:对于调用多个列的情况下的拼装代价很大

2.8 分布式数据库

(1)系统架构

  • 三种类型
    • Shared memory 共享内存:多芯片、多核
    • Shared disk 共享硬盘:多机连接相同的数据存储设备
    • Shared nothing :由以太网连接多台服务器,机群系统

国科大大数据课程复习笔记(1)

  • 关键技术
    • Partitioning(划分):把数据分布在多台服务器上,通常采用Horizontal partitioning(把不同的记录分布在不同的服务器上)
      • Hash partitioning: machine ID = hash(key) % MachineNumber->哈希随机
      • Range partitioning:每台服务器负责一个key的区间,有序划分不重叠

                    国科大大数据课程复习笔记(1) Join操作的并行执行:

  • 若partition key就是join key,可以并行执行,每台机器单机join
  • 不是,则需要在Join key上进行分布式partitioning,然后再join
  • Replication(备份):为了提高可靠性

(2)分布式事务处理:事务读写的数据分布在不同机器上,代价昂贵

  • 2 Phase Commit
    • Participant: 完成分布式事务的部分读写操作;Coordinator: 协调分布式事务的进行
    • phase 1 (voting):Coordinator向每个participant发送是否提交事务的询问消息,每个participant根据本地情况回答yes 或 no,只要有一个No,整个就不能提交
    • phase 2 (completion):1.当所有的回答都是yes, 事务提交,Coordinator向每个participant发送commit消息。Participant 回答acknowledgment,当至少一个的回答是no, transaction 将abort,coordinator向每个participant发送abort消息,Participant 回答acknowledgment
  • 崩溃恢复

国科大大数据课程复习笔记(1)