闪存数据库存储管理器优化

存储管理器则用来对底层的存储设备进行访问的IO操作,存储管理器可以直接访问设备,也可以通过文件系统来执行IO操作。那么分析现在的存储管理器针对硬盘都做了些优化,对于SSD,对于之前的优化方法是否需要继续用,或者有其他优化的部分,这也是我们需要思考的。

目录:

1、传统的数据库存储管理器主要用两种IO写入的特征,一种是基于页的写入,一种是基于日志的写入方式。
基于页的写入方式:

一个逻辑页对应一个物理页,发生更新的时候,同样一个更新之后的逻辑页被刷新到新的物理页上对应。

基于日志的写入方式:

这种方法是从文件系统的日志吸取而来,这种方法遇到更新逻辑页的时候,不是直接将更新的逻辑页写入到物理上,而是更新一次,产生一个更新的日志记录,在内存中记录这些更新的记录,当满了一个页的时候,将这些更新的记录一起写入到闪存上。闪存上存放的就是数据页和日志页。当需要读数据的时候,需要读原始数据和日志页,进行合并操作,得到最新的数据。

那么这两种方法有和优缺点呢?

基于页的存储方式:

优点:读操作只用读一个页,一次读IO即可,读性能高
缺点:每次更新都需要写操作,频繁更新写,写性能低

基于日志的存储方式:

优点:写操作每次更新日志缓存,形成 一个日志页在写入,更新写实际写入减少了,写性能好
缺点:每次读都需要读所有的更新日志,在进行合并,读性能低

2、那么对于这两种当时,当底层的存储介质变成了闪存的时候,闪存和传统 有哪些不同,应该使用什么样的手段去解决这些问题呢?

以前对于FTL的优化都是针对文件系统的,那么对于闪存,有哪些限制不同的地方:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

目前学术上对这种闪存不同于之前的情况,进行哪些优化呢?

对于基于页的存储管理:主要有DTFL

在这里插入图片描述

对于基于日志的存储管理,主要有以下6个方案:

LGeDBMS优化,日志存储优化
A/P方法,日志存储优化
IPL方法,日志存储优化
ICL方法,日志存储优化
基于页差异的日志方法PDL方法,新的日志方法
StableBuffer方法,基于闪存写入特性优化

这六个方法对针对闪存这种介质的,以及上面出现的传统数据库的优化应用到闪存上出现的问题,应该如何优化的方法,下面对着六种方法进行详细的阐述。

3、LGeDBMS优化

在这里插入图片描述
在这里插入图片描述

简单来说,这种方法将整个数据库看成一个大的日志,所有的页写都是追加写,那么之前可能会随机写的操作全部变成了顺序写操作,这样将随机写变成了顺序写,但是顺序的读由于追加写,会被写到不同的块上,那么会造成随机读,即将顺序读变成了随机读。

优点:

利用SSD的非常好的顺序写的带宽,顺序读和随机读的效果差不多

缺点:

没有减少写入,对闪存来说,写入的次数还是很多,多寿命,垃圾回收已然有影响。

4、A/P方法

在这里插入图片描述
这种方法,之前也是按照一个顺序追加写的方式进行,在此基础上进行了垃圾回收的和频繁更新写做了优化。

对于频繁的更新写,将更新写脏页缓冲取来,等到一个擦除快大小的时候,在批量写入。
对于垃圾回收,采用最加打包的形式,从日志的头部将有效数据读取并且打包,然后顺序的写回追加日志的尾部,然后进行无效块的回收,一个打包操作可以回收大量的空间。

缺点:

在这里插入图片描述

5、IPL方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

简单来说:IPL的方法是保证日志记录和原数据在一个物理块内,这样可以保证数据页通过日志合并的时候不用去大面积的扫描。同时将体制设置缓冲起来,然后使用批量写入,减小写性能。

缺点:

6、ICL方法


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

简单来说:在和传统日志直接在闪存上追加写不同的是,这种方法保证闪存上每个日志页的记录是递增的,也就是说每次有新的日志更新的时候,首先选取去读取闪存上记录的之前的记录,然后把这些记录合并起来,在一起写入到闪存上,这样可以保证的是,只会一个数据页的日志页只会有一个,读取的时候只会增加一次读操作,有利于解决传统日志方法读合并的问题。那么当一个日志页写满了之后,这个时候会执行一次数据合并操作,通过日志页算出最新的数据,并写回到对于的数据页上,然后释放之前的空间。
在这里插入图片描述

优点:

读取过程只需要读取一个日志页
在这里插入图片描述

7、基于页差异的日志方法PDL方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
简单来说,对于每个数据页,存放两个页,一个是数据页,一个是差异页。每次更新差异页的时候就是差异页刷新下来的时候,这样并不用存放所有的日志,只用存放这些日志的和即可,这样一来可以大大减小写入操作,同时对于读操作只会额外多一个读。

优点:

在这里插入图片描述

8、StableBuffer方法,基于闪存写入特性优化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9、总结

这6中方法中,如果是在日志上进行优化的话,从理论上分析基于页差异的PDL方法会有较好的性能,如果是从闪存的写入特性上来,那么最后一种StableBuffer非常的巧妙,而且这种方法不是说针对的是闪存,其实对于数据库,只不过增加了一个小的临时文件,但是会有较大的性能提升,这个方法非常好。
如果有机会,可以看下PDL和StableBuffer的实现源码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值