数据库原理系列一:存储引擎(上)

0:数据库架构 & 常见模块

在这里插入图片描述

Q1:为什么是disk-oriented架构?

  • 磁盘很慢。那么问题来了,磁盘慢为啥还要用呢?
  • 磁盘便宜。磁盘比内存那不是便宜了一点啊。
  • 比内存大。数据往往很大,如果单纯的就用内存,那么多的数据存在哪。
  • 永久存储。内存掉电数据就没了。

Q2:如果用了磁盘又会引入哪些问题?

  • 数据交互。磁盘&内存存储的数据需要换入换出。
  • 谁来换。DB or OS,各自的实现方式以及优缺点。
  • 换哪些。LRU策略,内存刷入刷出的策略有哪些,各自的特点是啥?
  • 什么时候换。刷脏页的条件,脏页线程轮询;buffer pool满了之类的。
  • 怎么换。怎样能有效的提高读写,邻近页怎么处理,是否考虑顺序的读取、写入。

Q3:谁来change page?

  • DB自身。同样的page交换,OS天然就自带这个功能mmap,为啥不用呢?
  • 场景1:如果内存中没有空间了,new page怎样加进来?OS会care哪些是你经常用的page?不会,OS只会根据自己的策略去淘汰。DB失去了对数据的control。
  • 场景2:并发读写page,并发读还好,如果是并发写呢?DB该如何来保证隔离级别&高并发的性能

Q4:要知道数据怎样在disk↔mem之间切换,先看看数据在disk上是怎样存储的

  • File → Page → Tuple
  • File。mysql8.0大多是情况下就是一个表一个idb文件
  • Page。可能包含tuples 元数据 索引 日志ect;有一个唯一id,查找用。
    • 磁盘扇区 ~ 512字节,这个也是redo log写盘的最小单位,保证原子性
    • OS ~ 4K
    • Mysql Page ~ 16K;因为和OS的4K不对等,为了保证原子,引入Double Write
  • Tuple。

Q5:File存储

怎样存储page,文件中的page

  • linked list ❎
  • page dirctory ✅
    在这里插入图片描述

Q6:Page存储

  • 存tuple(MySQL)
  • 存log(leveldb,rocksDB ) 分层→ 压缩问题
    在这里插入图片描述

Q7:Tuple存储

  • header。lsn信息[并发控制的],bitmap[NULL值信息]
  • data。字段值

Q8:PG怎样找到对应的record

  • page_id+offset

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值