CMU-15-445笔记(二)

占用空间大的值在tuple中的存储形式

Overflow storage pages


如果c是较大的值的话,c的位置可以放置指针,指向一个格外的页存储真实的数据,如果数据过大,可以在一个overflow page中再指向下一个overflow page。overflow page是在内存中常驻的,并且overflow page对于用户层面是透明的。

常见的overflow page名称与大小

  • Postgres: TOAST(> 2KB)
  • MySQL: Overflow(> 1/2 size of page)
  • SQL Server: Overflow(> size of page)

    External Value Storage


    这种形式是将较大的数据放在数据库外部,当做一个常规文件,c可以是指针或者路径名称。
    数据库不能控制外部文件的内容,也就没有了持久和事务的保护

    System Catalogs

    数据库都会将他们数据的catalog存入数据库内部
    catalog主要有
  • Table, columns, indexes, views
  • Users, permissions
  • Internal statistics
    它们本身会被存为table,tuple。

    数据库的存储模型

    OLTP

    主要包含简单的读写语句,每个语句都只操作数据库的一小部分数据

    OLAP

    主要处理复杂的,需要检索大量数据并聚合的操作

    Data Storage Models

    关系数据库将数据attributes组合成tuple,将结构相似的tuple组合成relation,它没有指定这些relation中的tuple以及tuple的attribute的存储方式。一个tuple的所有attributes并不需要存储在同一个页中
    常见的Data Stroage Models有
  • 行存储 N-ary Storage Model(NSM)
  • 列存储 decomposition Storage Model(DSM)

    NSM

    NSM将一个tuple的所有attributes在页中连续的存储,这种存储方式适合OLTP场景

    DBMS可以将一些常用的attribute建立index,查询语句就可以通过index找到相应的tuples

    对于只需要部分attribute的操作来说,这种方式会导致页中所有的数据被读入内存,造成空间上的浪费

    这里只需要读入最后两列,但是NSM需要将所有页读入内存

    NSM优缺点

    优点:
  • 快速的插入,更新,删除
  • 对于需要整个tuple是一个很好的选择
    缺点:
    对于需要大量查询范围,并且仅需要tuple中少数的attributes会造成空间上的浪费

    DSM

    DSM是将列属性放在一个页中

    这样就可以很好的解决NSM的问题

    需要哪列直接读取即可,没有读取无用列的浪费

    Tuple Identification

    同时这也带出来了一个问题,怎么匹配每个列属性
    Offsets
    最常用的方法,页中的值都有同样的长度,这样就可以直接使用offset来判断对应的行是哪个
    Embefdded Tuple Ids
    给每个attribute添加行id,浪费空间

    DSM优缺点

    优点:
  • 减少了NSM中冗余的IO,DSM只读取它需要的数据
  • 更好的处理查询以及更好的数据压缩支持
    缺点:
  • 涉及少量tuples,多数attributes的查询低效
作者

xiaomaotou31

发布于

2022-04-13

更新于

2022-04-13

许可协议

评论