Part3-Database Storage i

层次结构

存储Disk Manager => 缓冲池管理 Buffer Pool Manager => Access Methods => Operator Execution => Query Planning

Storage => Execution => Concurrency Control => Recovery => Distributed Databases => Potpourri

需要了解哪些API下层提供给上层

Disk-Oriented Architecture

面向磁盘型的数据库系统:假设数据库的主要存在位置都是放在磁盘上的

所要访问的数据都不在内存,需要到磁盘去读

区分non-volatile 非易失性 和 volatile 易失性存储,DBMS要管理数据between non-volatile and volatile

存储层次

  1. 如果数据存在易失存储,支持快速访问,随机访问,访问速度大体相同(不管位置和顺序)
  2. 非易失的存储,具有块寻址能力,没有字节寻址能力。得到block或者page,更快的顺序访问。

DRAM=>Memory, SSD HDD Network Storage => Disk

The goal of what we’re trying to do in our database system is that we wan to provide the illusion to the application,that we have enough memory to store their entire database in memory.

请求page过程

sync:

sync也是一个linux同步命令,含义为迫使缓冲块数据立即写盘并更新超级块。在linux系统中,为了加快数据的读取速度,默认情况下,某些数据将不会直接写入硬盘,而是先暂存内存中,如果一个数据被重复写,这样速度一定快,但存在一个问题,万一重新启动,或者是关机,或者是不正常断电的情况下,由于数据还没来得及存入硬盘,会造成数据更新不正常,这时需要命令sync进行数据的写入,即#sync,在内存中尚未更新的的数据会写入硬盘中。所以在关机或者开机之前最好多执行这个几次,以确保数据写入硬盘。

**用途:**更新 i-node 表,并将缓冲文件写到硬盘中。

OS

os 负责 移动数据

只读数据

可以通过多个线程来获取mmap files to hide page fault stalls,但是仅限于只读数据

Multiple Writers

如何处理多线程写呢? 事务、并发控制

  1. madvise:告诉OS具体访问哪些页面
  2. mlock:阻止pages 被回收
  3. msync:flush to disk

mmap is a bad idea.

q1:如何用磁盘上的文件表示数据库?

File Storage

DBMS存储一个数据库到磁盘上以一个或者多个文件的形式,OS不知道文件内容。放在文件系统里面,ex3ex4。基于OS的FS提供的基本读写API对文件进行读写。

Storage Mangager

负责维护磁盘上的数据库文件.

linux 对单一进程有文件打开数量的夏至,ext3文件系统下单个目录里最大文件数没有限制,仅仅受限于inode数

对磁盘write/flush 通常存储设备只能保证每次写入4KB时是原子的

Page Storage Architecture

page存储架构

Database Heap

heap 无序组织tuple数据,随即顺序。

Represent Heap File

Linked List

is a bad idea

Page Directory

普遍做法

维护一个特殊的页面,里面记录着数据页的位置;pageid和他们所处位置的映射关系,也可也记录空闲页。

维护日志以及初始元数据。


Page Layout

Page Header

每一页都有一个header,放元数据以及

  • pagesize
  • checksum
  • dbms version
  • transcation visibility
  • compression information

有一些系统需要页self-contained

Tuple-oriented

在一个页面里面如何组织数据

strawman idea:Keep track of the number of tuples in a page and then just append a new tuple to the end.

使用slotted pagesslot array将特定的slot映射到page上的某个偏移量上面,根据偏移量可以得到tuple

填充方式:数据从后向前填充,slot从前向后

slot存储的是偏移量。上层只需要提供pageid就能够get page

识别tuple:page_id + offset/slot

ctid 是 PG里面的 用来表示物理位置的一个pair (page_id,slot)

如果删除一个tuple slot2的,然后插入一个新的tuple,数据库不会立刻整理碎片,而是继续往后插入。

vaccum:PG里面的垃圾回收站,遍历page然后整理。

sql sever 没有ctid,但是有内置函数。

select sys.fn_PhysLocFormatter(%%physloc%%) as [File:Page:Slot],r.8 from r;

sql sever 当更新page的时候,sql sever如果发现有可用空间,那么将page变得紧凑,然后再将数据写出到page里面,如果是先删除后插入,那么slot不是0 2 3 而是 0 1 2

Oracle 内部维护ROWID

前面这些反应位置的地方,叫做内部虚拟列。数据库系统会把它当时保留字,不能用这个当作列名

Log-structured

Tulpe Layout

tuple 结构:header + attribute Data

header追踪不同的东西例如哪一个事务查询修改了这个tuple

例如一个tuple五个属性

tuple : heaer + a + b + c + d + e

来自不同表的数据保存在同一个Page里面?

Answer:为了保证Page的独立性,不要在一个page保存不同表的额外的元数据

反范式化

俩表有外键依赖,数据库内部会自动内嵌。

能够减少IO次数,pre join有点。但是可以make updates more expensive

Conclusion

  1. database is organized in pages
  2. different ways to track pages
  3. different ways to store pages
  4. different ways to store tuples

【CMU15-445 Part-3】DatabaseStorage i相关推荐

  1. 【数字智能三篇】之三: 一页纸说清楚“什么是深度学习?”

    按:[数字智能三篇] 目前"大数据"."推荐系统"."深度学习"是数字智能领域的热点研究方向,相关的书籍也很火热,比如"大数据&q ...

  2. 【CentOS Linux 7】【Linux网络配置基础】

    Linux系统及应用---调研报告 [CentOS Linux 7]实验1[VMware安装.新建虚拟机:63个基础命令运行结果图] [CentOS Linux 7]实验2[Shell编程及应用] [ ...

  3. 广外计算机考研专业课,【广外考研论坛】 21广外各专业考研问题全解答!纯干货!...

    原标题:[广外考研论坛] 21广外各专业考研问题全解答!纯干货! #关于广外报考问题 Q:招生目录上公布的招生人数是最终确定人数的吗? A:研究生招生是头年各招生单位出招生简章,次年教育部才下达招生计 ...

  4. 大数据_02【大数据基础知识】

    大数据_02[大数据基础知识] 01 什么是服务器 02 服务器类型 03 存储磁盘(硬盘) 04 什么是RAID RAID特点 RAID种类 05 什么是集群 06 什么是计算机网络 07 什么是交 ...

  5. 【实战HTML5与CSS3】免费制作威客页面啦(附源码)

    [实战HTML5与CSS3]免费制作威客页面啦(附源码) 原文 http://www.cnblogs.com/yexiaochai/archive/2013/05/05/3060770.html 前言 ...

  6. 【笨木头Lua专栏】基础补充04:迭代器初探

    今天学习的内容还蛮有意思的,让我兴奋了一下~ 笨木头花心贡献,哈?花心?不,是用心~ 转载请注明,原文地址: http://www.benmutou.com/archives/1714 文章来源:笨木 ...

  7. 【详情页优惠券数据】淘宝app商品详情原数据item_get_app

    item_get_app-获得taobao app商品详情原数据参数说明 taobao.item_get_app 首先,大家要到官方主页去申请一个 appkey,这个是做什么用的呢?App Key 是 ...

  8. 【Android开发VR实战】三.开发一个寻宝类VR游戏TreasureHunt

    转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53939303 本文出自[DylanAndroid的博客] [Android开发 ...

  9. 【谷粒商城 -秒杀服务】

    谷粒商城–秒杀服务–高级篇笔记十二 1.后台添加秒杀商品 未配置秒杀服务相关网关 1.1 配置网关 - id: coupon_routeuri: lb://gulimall-couponpredica ...

  10. 【快速上手mac必备】常用优质mac软件推荐(音视频、办公、软件开发、辅助工具、系统管理、云存储)

    本文章的主要内容是我作为一名大四学生.准程序员.up主这三种身份来给大家推荐一下 mac 上好用的软件以及工具.本人也是从去年9月份开始从windows阵营转移到了mac阵营,刚开始使用的时候,也曾主 ...

最新文章

  1. 优秀的博客与文章总结链接地址
  2. 阶段1 语言基础+高级_1-3-Java语言高级_02-继承与多态_第1节 继承_2_继承的格式
  3. 武侠乂服务器位置在哪,武侠乂手游秘境在哪里 地图秘境宝藏分布位置大全
  4. 回顾丨2021数据库大咖讲坛(第6期)视频PPT互动问答
  5. manjaro双系统 windows_在Windows基础上安装Manjaro双系统和基本配置
  6. ASP.NET站点构建之减少不必要的请求
  7. matlab 曲线拐点_如何用matlab把一组数据模拟一个函数图像?并找出曲线拐点?...
  8. Zabbix email 配置
  9. cf显示网络连接服务器失败怎么办,cf连接服务器失败怎么办
  10. 解决:修改docker bip项重启后,docker0的ip仍不变
  11. Pandas Percentile计算方法
  12. MATLAB长除法求z变换逆变换
  13. 至高荣誉:WPS制作荣誉证书(转)
  14. 智商黑洞(门萨Mensa测试)2
  15. 电脑上的计算机可以加密码,如何给电脑上的文件夹加密
  16. 利用Python处理辅助明细账并计算账龄
  17. 利用photoshop切图
  18. 元宇宙开发者指南【Metaverse】
  19. 系统级ESD:一盎司预防胜过一磅治疗
  20. 高端大气上档次的网站

热门文章

  1. 【网络安全】使用goole让burpsuit跑字典
  2. Sybyl表面设置颜色参数
  3. pc端VUE实现一键复制内容功能
  4. 如何查看非自己提交的请求的结果
  5. 从早吃到晚,才是我对旅行目的地最大的尊重
  6. WPS或word编辑公式后行间距变大与公式浮动问题
  7. js 遍历对象方法大全
  8. 一年Android工作经验,今日头条 阿里 百度 网易 美团 小米 快手面经
  9. matlab如何定义一个序列,EXCEL中如何创建自定义序列 看完你就知道了
  10. 换行样式不要首行缩进_为什么WORD正文设置首行缩进后,标题在应用样式格式后依然首行缩进...