cmu15445 存储引擎 and Buffer Pools

4、存储引擎

volatile(易失的,断电就丢失):按照字节存储

non-volatile(非易失,比较稳定):是按照块进行存储,不是按照字节进行存储。硬盘之类的

在各层之间还有其他的

顺序存取和随机存取

读取数据:顺序存取更快,尽可能把随机的转为连续的。

DBMS:在磁盘中数据的存储如Disk所示,会存在一个类似于目录的块,后面则以page的形式存在,每个page都会在目录中对应一个索引。

而加载的时候则是分批次进行加载,需要哪一块的内容则将哪一块的对应的page加载到memory之中。

数据库存储的两大问题:

1.数据库的数据落到磁盘上是怎么表现的?

file storage:存在磁盘中的一个或者多个文件之中,操作系统不知道文件的内容 。一块数据(元组,索引,日志)hardware page(磁盘中的页,通常4k)OS page(操作系统的页,通常4k)database page(512b-16k),

page layout:包含一个header和data

用slotted尽可能的利用空间

tuple layout:二进制的字节

数据存储之间没有分隔

log-structured file organization:tuple中存的不是数据,插入删除更新都是加入log标明我已经对数据进程操作;如果要读一条数据,则需要进行数据的回放,从最下面往最上面进行推断。但是效率比较低,因此会周期性的压缩这些log,第二张图片就是压缩的结果。

可进行合并压缩,将随机的写更改为连续的写。

2.数据库如何管理数据在内存和磁盘之间的流动?浮点型不够精确

Numeric:

如果数据太长了(溢出),那么会新开一个溢出页进行存储 也可以存储外部文件,链接到该字段(外部文件内容不稳定,易被修改)

Database Workloads

On-Line Transcation Processing(OLTP):快速操作,读取更新小的数据量(高并发)。

On-Line Analytical Processing(OLAP):复杂的记录,需要大量的计算。

Hybrid Transaction + Analytical Processing(HTAP):事务处理和分析处理的混合

Bifurcated Environment:

小的数据库做事务性的任务(按行存(插入更新很快,但是如果要扫描一整列则开销很大)的数据更适合事务性,这些行组成一个page),大的数据仓库做分析。

数据在数据库中不一定按照列或者行存储,只是用户需要查询出行列的形式便于观察

按行存(插入更新很快,但是如果要扫描一整列则开销很大)的数据更适合事务性,这些行组成一个page

按列存(DSM),对数据分析更便利,对于查询和压缩好。点查询难,更新难难以划定索引。两种方式建立索引,1.直接规定第一个坑是谁第二个是谁 2.对每一个列都进行索引

5、Buffer Pools(缓存池,内存池)

数据库如何管理数据在内存和磁盘之间的流动?

空间控制(Spatial Control):把用户常用的数据集中放在缓存池中,快捷存取

时间控制(Temporal Control):最大限度的减少用户在读取数据的时间;什么时候把页读取到内存中,什么时候把内容写到磁盘上。

Buffer Pool Organization:内存中的缓存池也是一页一页分开的,称之为Frame(帧)。内存池中的一个frame对应磁盘中的一个page。需要用page TABLE去建立索引,对内存池进行索引。

Locks:逻辑上的锁

Latches(Mutex):底层的具体的

Allocation Polices:从磁盘缓存的页的放置策略,全局策略(统一安排缓存的页),本地策略(对每个页都进行不同的安排)

提高缓存池性能的策略

1.多缓存池,即存索引的有单独内存池,存数据的有单独的缓存池,将不同的类型分开。

2.Pre-Fetching(预先缓存):

3.Scan Sharing:若俩语句读一个表,那么可以进行同步扫描,把结果直接进行共享。Q1先进行扫描,当1到page3时Q2进场(发现Q2的执行和Q1是一样的),那么就直接先让Q2跟着Q1一起进行,当两者共同部分结束时,Q2再去执行剩余。但是如果限制前100,会产生不同的结果,不能确保从哪一条开始计算。

4.BY Pass:扫描的数据不进内存池,放在内存中一块区域,用完即丢。

5.OS Page Cache:操作系统也会缓存数据库的文件,一般需要绕过操作系统的缓存。因为冗余,操作系统不知道怎么淘汰不需要的数据,难以优化。

因此需要进行绕开。

Buffer Replacement Policies(替换缓存策略):快准狠

Least-Recently Used(LRU,最近最久替换):机械的去除老的,但是老的page也可能是最重要的。

Clock,根据ref的值进行判断,ref=1则判断被读取,然后就ref变成0,即不断地周期循环

LRU-K:记录前K词的读取,分析出规律,看是否是热点page。

Localization:与自己语句相关的进行驱逐,与自己无关的不驱逐。

Priority Hints:告诉缓存池这个page很重要,即权重很高,不要轻易清理。

Dirty Pages:改了页,但是没有存。内存和磁盘中不一致

如果发现dirty了,内存池则不能清理,写到磁盘。刷脏:内存往磁盘写。刷脏不能早于日志,先写日志。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值