数据库管理系统学习笔记

数据库管理系统学习笔记

1. 数据的四个基本概念

  1. 数据

​ 数据是数据库中存储的基本对象,描述事物的符号记录称为数据。数据的含义称为数据的语义,数据与其语义是不可分的

  1. 数据库(DB)

​ 是长期储存在计算机内、有组织的、可共享的大量数据的集合

  1. 数据库管理系统(DBMS)

​ DBMS是一个大型复杂的基础软件系统,位于用户与操作系统之间的一层数据管理软件。DBMS能够科学地组织和存储数据、高效地获取和维护数据。
​ DBMS具有数据定义(提供数据库定义语言DDL),数据组织、存储和管理(提供数据操作语言DML),数据库的事务管理和运行管理(安全性等),数据库的建立和维护等功能。

  1. 数据库系统(DBS)

​ 数据库系统由数据库、数据库管理系统(及其应用开发工具)、应用程序、数据库管理员四部分构成。

2. RDBMS的系统架构

  1. 事务管理:

    • 目标是实现ACID

    • 进行logging写日志,locking加锁

    • 保证并行transactions事务的正确性

在这里插入图片描述

  1. 数据库数据访问方式:

    • 顺序访问:时间性能不够
    • 选择性访问:1. Tree based:有序,支持点查询和范围查询 2. Hash based:无序,只支持点查询
    • 选择性访问:1. Clustered index(主索引):Clustered: 记录就存在index中,记录顺序就是index顺序。2. Secondary index(二级索引):Secondary: 记录顺序不是index顺序,index中存储page ID和in‐page tuple slot ID.
    • 顺序访问与二级索引访问比较:顺序访问需要处理每一个记录,顺序读每一个page;二级索引访问:有选择地处理记录;随机读相关的page
    • 到底采用哪种方式:1. 由最终选中了多大比例的记录决定:selectivity 2. 可以根据预测的selectivity、硬盘顺序读和随机读的性能,估算两种方式的执行时间 3. 选择时间小的方案
  2. B + B^+ B+树:

    • 每个节点是一个page
    • 所有key存储在叶子结点
    • 内部节点完全是索引作用
    • search代价:总I/O次数=树高: O ( l o g B N ) O(log_BN) O(logBN),总比较次数:每个节点内部二分查找: O ( l o g 2 B ) O(log_2B) O(log2B)------ O ( l o g B N × O ( l o g 2 B ) = O ( l o g 2 N ) ) O(log_B N\times O(log_2 B)=O(log_2N)) O(logBN×O(log2B)=O(log2N))
  3. 为什么需要 Buffer pool? 每次访问直接读写硬盘 会有什么问题吗? 提高性能,减少 I/O

  4. 替换策略:1. Random:随机替换 2. FIFO(First In First Out):替换最老的页 3. LRU (Least Recently Used):最近最少使用 4. **Clock ** 算法

  5. Join实现的三种方式:R有 M R M_ R MR个page,S有 M S M_S MS个page,每个page有B个记录

    • Nested loop:总共读pages数量: M R + B M R M S M_R+BM_RM_S MR+BMRMS(I/O成本极大) Index Nested Loop Join 经常被使用,尤其是当很少有匹配时,效率很高
    • Hashing:GRACE Hash Join 性能分析 总代价:读 2 M R + 2 M S 2M_R+2M_S 2MR+2MS个page,写 M R + M S M_R+M_S MR+MS个page (I/O Partitioning思想)
    • Sorting:Sort Merge Join:1. 通常代价比Hash Join稍差 2. 当一个表已经有序的情况下,会被使用。读写次数: M 2 M^2 M2

3. 事务处理

  1. ACID:DBMS保证事务的ACID性质

    • Atomicity(原子性):要么完全执行,要么完全没有执行
    • Consistency(一致性):从一个正确状态转换到另一个正确状态
    • Isolation(隔离性):每个事务与其它并发事务互不影响
    • Durability(持久性):Transaction commit后,结果持久有效,crash也不消失
  2. Read uncommitted data (读脏数据) (写读):在T2 commit之前,T1读了T2已经修改了的数据

  3. Unrepeatable reads(不可重复读) (读写):在T2 commit之前,T1写了T2已经读的数据;如果T2再次读同一个数据,那么将发现不同的值

  4. Overwrite uncommitted data (更新丢失) (写写):在T2 commit之前,T1重写了T2已经修改了的数据

  5. 韩顺平版本在这里插入图片描述
    在这里插入图片描述

  6. 隔离级别:

在这里插入图片描述

  1. 并发控制

    • 悲观锁:假设数据竞争可能经常出现,采用某种机制保证数据竞争不会出现,直接锁死,例如,如果一个Transaction T1可能和正在运行的其它Transaction有冲突,那么就让这个T1等待,一直等到有冲突的其它所有Transaction都完成为止,才开始执行。
    • 乐观锁:假设:数据竞争很少见,检查:先执行,在提交前检查是否没有数据竞争,例如,允许所有Transaction都直接执行,但是Transaction不直接修改数据,而是把修改保留起来,当Transaction结束时,检查这些修改是否有数据竞争,没有竞争,成功结束,真正修改数据,有竞争,丢弃结果,重新计算。
    • 乐观的并发控制:不采用加锁
      1. 读:事务开始执行,读数据到私有工作区,并在私有工作区上完成事务的处理请求,完成修改操作
      2. 验证:如果事务决定提交,检查事务是否与其它事务冲突 – 如果存在冲突,那么终止事务,清空私有工作区 – 重试事务
      3. 写:验证通过,没有发现冲突,那么把私有工作区的修改,复制到数据库公共数据中
      4. 优点:当冲突很少时,没有加锁的开销
      5. 缺点:当冲突很多时,可能不断地重试,浪费大量资源,甚至无法前进

    4. 持久性实现

    1. 解决方案: WAL (Write Ahead Logging)
    2. 保证:日志记录一定是先于修 改后的数据出现在硬盘上
    3. 设置Checkpoint (检查点):1. 为了使崩溃恢复的时间可控 2 .如果没有checkpoint,可能需要读整个日志,redo/undo很多工作
    4. checkpoint的内容:
      • 当前活动的事务表:包括事务的最新日志的LSN
      • 当前脏页表:每个页最早的尚未写回硬盘的LSN

    5. 数据仓库

    1. 数据仓库:少量的数据分析操作;每个操作访问大量的数据;分析操作以读为主

    2. 事务处理:大量的并发transactions;每个transaction访问很少的数据;读写

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程哥哥吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值