[CMU15445]:数据库存储

基于日志的page组织

1

在某些数据库中,page中放置的并不是单纯的tuple, 而是包含了对于数据库的改动,比如插入、删除、更新等

  • 优点

    当使用日志文件组织数据库时,进行的I/O都是顺序的,只需要在page后面不断追加记录即可

    如果使用slot array方式存储tuple, 那么当tuple分散在不同的page时,就需要访问多个page,效率就会降低

​ 此外,使用日志对数据库文件进行组织,便于回滚到以前的某一个状态,只需要沿着记录还原出原来的tuple即可

  • 缺点

    读取tuple时会比较慢,因为记录的是日志,如果想要获取某个tuple的状态,就必须要找到所有对这个tuple有改动的日志记录,

    如果日志数量比较庞大,就会比较慢

    解决方法

    一种常见的优化方法是索引和压缩技术

    首先使用索引快速找到针对于某一个tuple的修改记录

    2

    事实上,与一条tuple有关的所有记录,都可以被压缩成一条记录,采用压缩技术可以节省很大空间同时加快查找速度

    上面的page可以被压缩成如下

    3

sql中的数值存储类型

在sql中,小数可以使用定点存储也可以采用浮点存储,不同的厂商有不同的选取,但有两个结论是不变的

  • 定点运算比浮点运算慢
  • 定点运算的精度往往比较低,但是数值一定是准确的,浮点运算的精度比较高,但是数值可能不准确

sql中定点的数据类型如decimal, 浮点的数据类型如float, real/double

看下面的例子就知道了

4

原因是由于如今计算机中对于浮点运算只需要采用一条指令即可,而对于定点运算则需要进行一些程序运算

5

大对象存储

有时一个tuple中的某个属性可能无法完整的和其他tuple属性存储在一个page中,此时可以将其额外存储在一个page上,我们将其称为

overflow page

6

不同厂商对overflow page大小也有着不同规定,可以看上面的图片

  • 在原tuple的对应位置可以存储overflow page的指针,这样当访问大对象时,可以通过指针来找到这些大对象

    有的对象可能一个page 都放不下,此时可以采用链表的形式,在overflow page中留下一些位置来指向下一个overflow page,在其

    它overflow page中继续存储

external vaule storage

这个词不大好翻译,姑且将其称之为外部存储

外部存储指的是将文件全部存储在外部磁盘中,这些磁盘不属于数据库,数据库只对他们有读取的权利,在数据库中只存放这些文件在操作系统文件系统中的位置,比如说相对路径

7

这个技术主要是针对于那些超大文件,比如视频网站中的视频文件,将那些视频文件放在数据库磁盘中无疑是浪费空间,因为

我们需要的往往是高性能数据库,数据库中的磁盘容量十分宝贵

  • blob

    这些大型的文件通常被称之为blob(binary large object)

工作负载

数据库中有着两种不同的负载,下面主要介绍两种

  • OLTP(Online Transcation Processing)

    OLTP指那些访问数据量小的操作,常见的电商交易中对订单以及交易记录的更新,更多情况下是对数据库中的文件进行写操作

  • OLAP( Online Analytical Processing)

    这种操作往往意味着复杂的查询,更多的是读取操作

  • HTAP( Hybrid Transaction + Analytical Processing)

    该情况指的是在一个数据库上同时使用OLAP和OLTP

    它们对应的查询情况的复杂度以及读写情况如下图

    8

数据库存储模型

  • N-ary model(NSM)

    在该模型中,DBSM将一个tuple中的所有元素连续地存储在一个单独的page中,即“行存储”

    9

    • 优点

      • 快速的删除,更新,插入

      • 对于需要整个tuple的查询友好

    • 缺点

      • 对于需要某一列或者几列的一次大量地查询不友好

        因为如果想要拿到tuple中的某一列,在该模型中,就得取一整个tuple,那么大量的不需要的tuple属性就会被拿到buffer

        pool,污染缓冲池

    对于OLTP来说,它往往需要次数密集地整个tuple的插入或者删除,这正好是NSM的适用场景,

    相反,这种场景不适用于OLAP

  • 分解存储模型(Decomposition Storage Model, DSM)

    在该模型中,DBSM会将tuple中的属性连续地放在page中,即”列存储”

    10

    • 优点

      • 在查询时减少了无用功,因为它仅仅读取那些需要的数据

      • 空间被更好地压缩

        因为一个page中存储的都是相同类型的数据,所以可以只存储数据与某个数据的差值,而没必要存储整个数据

    • 缺点

      在进行完整查询,删除,更新时都非常慢,因为tuple被分散在各个page,如果想要对一个tuple进行操作,就必须要要访问很多page


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!