前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CMU15-445 Database Storage

CMU15-445 Database Storage

原创
作者头像
LeJ
修改2021-10-08 10:05:06
5170
修改2021-10-08 10:05:06
举报
文章被收录于专栏:我的程序入门我的程序入门
Image.png
Image.png

(图片来自CMU15-445课件)

概述

volatile,random Access,字节寻址

non-volatile,sequential Access,块寻址能力,即使只是需要64bit的数据,也必须去获取存储该数据的整个块(4KB)。

面向磁盘型数据库管理系统: 数据库的主要存储位置在磁盘。意味着每次执行查询,所要访问的数据都不在内存中。涉及到I/O。

storage hierarchy:

读一本书:

L1-> 书在桌上

L2-> 输在隔壁房间

L3-> 书在图书馆

基于从磁盘读写数据受到磁盘读写速度的影响,主要关注点在如何谨慎地最小化从磁盘读写数据的影响。

设计DBMS的目标是:

在数据库系统中达成的目标是给应用程序一种错觉,我们能提供足够大的内存将整个数据库都存入内存。

即即使存储的数据超过了可用的内存量,也不必每次停下来进行数据的读写。

Disk -Oriented DBMS:

IMG_20210925_193029_edit_439710923499569.jpg
IMG_20210925_193029_edit_439710923499569.jpg

既然会涉及到从磁盘读取数据,为什么不考虑使用OS去进行控制?

  • OS:本质上是从磁盘上获取文件,告知操作系统,将文件页面映射到需求进程的地址空间中,然后 就可以对这些内存地址进行读写。
  • 如果使用操作系统,dbms就丧失了对文件从磁盘到内存移动的控制权。(是否是如果在读写数据的步骤中发生了错误,导致数据的丢失或其他错误,数据库无法得到相应的消息?)
  • 同时,使用OS的话,在磁盘读取数据到内存中,发生缺页中断,进程本身会进行等待,则导致此时数据库也进行等待。因此考虑到降低停顿的时间,也得放弃使用OS来进行数据从磁盘到内存的读取。

!!!OS不是你的朋友

database storage层要解决的问题:

*

* 问题一:DBMS如何在磁盘上表示数据库?

* 问题二:DBMS如何管理它的内存以及磁盘上数据的存取?

问题一:DBMS如何在磁盘上表示数据库?

DBMS在磁盘存储数据库的形式就是文件(os的文件系统中的文件),因此可以利用OS提供的API进行文件的读取。

第一个出现的组件:存储引擎(维护磁盘上的DB文件)。

shim层:

存储引擎会将所有的文件组织成page集合。本质上,一个page就是一个固定大小的数据块。一些DBS会要求page是self-contained,即每个page的所有信息,其自身都知道该如何去解释和理解。

每个page都会被赋予一个唯一的内部标识符。

indirection层:

一些DBMS有一个indirection layer,该层允许我们将一个page ID映射到某个集合中一个文件的某个位置(记录的是一个相对位置,方便文件整体移动后,能够快速定位该page),磁盘移动或更换都不会改变page ID。

DBMS中三个page概念:

  • HardWare Page:usually 4KB,原子的,即每次write或flush,存储设备只保证每次写入4KB时时原子的。
  • OS Page:4KB,可以从存储设备中去除数据放入内存。
  • Database Page:512B-16KB

不同的数据库用不同的方式管理磁盘上文件中的pages,是一个trade-off。

Heap File Organization(最常见的):

  • 在storag manager的底层,并不关心page中有什么,Database中的heap文件是一个无序的page集合,并且tuple的存储顺序也是随机的。
  • 会提供堆page进行读写和访问的API
  • 也会额外使用一些元数据(meta-data)来跟踪有哪些page以及哪些page是空余的。
  • heap file的表示:
    • linked list:Header page holds pointers to to a list of free pages and a list of data pages. 但是找数据的话,必须循序扫描
    • Page directory:专门维护一个page用于直接跟踪data page在file中的位置
page laye

每个page在头部会包含一些关于该page某些信息的meta-data,包括:

page size、checksum、DBMS version、Transaction Visibility、Compression Information、Some systems require pages to be self-contained (e.g oracle).

存储data的方式:

  • slotted-pages
1-tupleStorage.jpg
1-tupleStorage.jpg
2-tupleStorage.jpg
2-tupleStorage.jpg
  • log-structured:
    • 不将所有的tuple都存放在page中,而是去存储如何创建的以及修改的信息,就如同日志记录一样。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 问题一:DBMS如何在磁盘上表示数据库?
    • shim层:
      • indirection层:
        • page laye
        相关产品与服务
        对象存储
        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档