课程链接:15-445/645 Database Systems (Fall 2020)

本文由 nefu-ljw 翻译于Notes:https://15445.courses.cs.cmu.edu/fall2020/notes/04-storage2.pdf

所有Notes已同步更新于我的github仓库:https://github.com/nefu-ljw/database-notes

文章目录

  • 1. Data Representation
  • 2. Workloads
  • 3. Storage Models

1. Data Representation

元组中的数据本质上只是字节数组。DBMS需要知道如何解释这些字节来派生属性值。数据表示模式是DBMS存储值的字节。

有五种高级数据类型可以存储在元组中:整数、可变精度数字、定点精度数字、可变长度数据和日期/时间。

Integers (整数)

大多数DBMS使用IEEE-754标准指定的“本机”(native)C/C++类型存储整数。这些值是固定长度。

例子: INTEGER, BIGINT, SMALLINT, TINYINT

Variable Precision Numbers (可变精度数字)

这些是不精确、变精度的数值类型,它们使用IEEE-754标准指定的“本机”C/C++类型。这些值也是固定长度。

对变精度数字的运算比对任意精度数字的运算速度更快,因为CPU可以直接对它们执行指令。但是,由于某些数字不能精确表示,因此在执行计算时可能会出现舍入误差。

例子: FLOAT, REAL

Fixed-Point Precision Numbers (定点精度数字)

这些是具有任意精度和小数位数的数值数据类型。它们通常以精确的、可变长度的二进制表示形式存储(几乎就像一个字符串),并带有附加的元数据,这些元数据将告诉系统数据的长度和小数应该在哪里等信息。

当舍入误差不可接受时,将使用这些数据类型,但DBMS会为获得此精度而付出性能代价。

例子: NUMERIC, DECIMAL

Variable-Length Data (可变长度数据)

它们表示任意长度的数据类型。它们通常与跟踪字符串长度的header一起存储,以便于跳转到下一个值。它还可以包含数据的校验和。

大多数DBMS不允许元组超过单个页面的大小。那些确实将数据存储在特殊的“溢出”(overflow)页面上并使元组包含对该页面的引用。这些溢出页可以包含指向其他溢出页的指针,直到可以存储所有数据为止。

有些系统允许您将这些大值存储在外部文件中,然后元组将包含指向该文件的指针。例如,如果数据库存储照片信息,则DBMS可以将照片存储在外部文件中,而不是让它们占用DBMS中的大量空间。这样做的一个缺点是DBMS不能操作该文件的内容。因此,不存在持久性或事务保护。

例子: VARCHAR, VARBINARY, TEXT, BLOB

Dates and Times (日期/时间)

日期/时间的表示形式因系统不同而不同。通常,这些时间表示为自Unix时代以来的某个单位时间(微/毫秒)。

例子: TIME, DATE, TIMESTAMP

System Catalogs (系统目录)

为了使DBMS能够破译元组的内容,它维护一个内部目录来告诉它有关数据库的元数据。元数据将包含有关数据库有哪些表和列的信息,以及它们的类型和值的排序。

大多数DBMS以用于其表的格式将其目录存储在自身内部。他们使用特殊代码来“引导”(bootstrap)这些目录表。

2. Workloads

数据库系统有许多不同的工作负载。关于工作负载,我们指的是系统必须处理的请求的一般性质。本课程将重点介绍两种类型:联机事务处理(OLTP)和联机分析处理(OLAP)。

OLTP: Online Transaction Processing

OLTP工作负载的特点是快速、短时间运行操作、单次操作单个实体的简单查询和重复操作。OLTP工作负载通常处理的写操作多于读操作。

亚马逊店面就是OLTP工作负载的一个示例。用户可以向购物车中添加物品,也可以进行购买,但这些操作只会影响他们的账户。

OLAP: Online Analytical Processing

OLAP工作负载的特点是长时间运行、复杂的查询、对大部分数据库的读取。在OLAP工作区中,数据库系统从OLTP端收集的现有数据中分析和派生新数据。

OLAP工作负载的一个示例是亚马逊计算这些地理位置在一个月内购买最多的五种商品。

HTAP: Hybrid Transaction + Analytical Processing

最近流行的一种新型工作负载是HTAP,它就像是试图在同一数据库上同时执行OLTP和OLAP的组合。

3. Storage Models

在页面中存储元组有不同的方法。到目前为止,我们假设了n元存储模型(n-ary storage model)。

N-Ary Storage Model (NSM)

在n元存储模型中,DBMS在单个页面中连续存储单个元组的所有属性,因此NSM也称为“行存储”(row store)。此方法非常适合请求插入频繁且事务往往只操作单个实体的OLTP工作负载。它非常理想,因为只需一次提取即可获得单个元组的所有属性。

优点:

  • 快速插入、更新和删除。
  • 适用于需要整个元组的查询。

缺点:

  • 不适用于扫描表的大部分和/或属性子集。这是因为它会获取处理查询不需要的数据,从而污染缓冲池。

Decomposition Storage Model (DSM)

在分解存储模型中,DBMS将所有元组的单个属性(列)连续存储在一个数据块中。因此,它也被称为“列存储”(column store)。此模型非常适合具有许多只读查询的OLAP工作负载,这些只读查询对表属性的子集执行大型扫描。

优点:

  • 减少查询执行期间浪费的工作量,因为DBMS只读取该查询所需的数据。
  • 启用更好的压缩,因为同一属性的所有值都是连续存储的。

缺点:

  • 由于元组拆分/缝合,点查询、插入、更新和删除的速度较慢。

要在使用列存储时将元组重新组合在一起,有两种常见的方法:最常用的方法是定长偏移(fixed-length offsets)。假设属性都是固定长度的,DBMS可以计算每个元组的属性偏移量。然后,当系统需要特定元组的属性时,它知道如何从offest跳到文件中的那个位置。要容纳可变长度的字段,系统可以填充字段,使其长度相同,也可以使用字典,该字典采用固定大小的整数并将该整数映射到该值。

一种不太常见的方法是使用嵌入式元组ID(embedded tuple ids)。在这里,对于列中的每个属性,DBMS都存储一个元组ID(例如:主键)。然后,系统还会存储一个映射,告诉它如何跳转到具有该ID的每个属性。请注意,此方法具有很大的存储开销,因为它需要为每个属性条目存储一个元组ID。

CMU15-445 Lecture #04: Database Storage (Part II)相关推荐

  1. 数据结构与算法:04 C#面向对象设计 II

    04 C#面向对象设计 II 知识结构: 5.属性 例1:属性概念的引入(问题) public class Animal {public int Age;public double Weight;pu ...

  2. 系统管理Lesson 07. Managing Database Storage Structures

    系统管理Lesson 07. Managing Database Storage Structures 1. 块内部是如何保存关系型表格数据的? 7-3 2. 表空间的类型有几种?分别说明各自的用途. ...

  3. accdb原有的数据怎么清除_数据库存储(database storage)

    这节课主要是搞懂两大问题,如下图: 来自于CMU课程15445 slide 问题一:首先这门课把存储设备分为"Non-volatile" 和"Volatile" ...

  4. Ubuntu20.04运行帝国时代II征服者

    1. http://u2.xainjo.com//lh/diguoshidai2zhengfuzhe.zip 如果无法下载可以从下面网盘下载: 链接: https://pan.baidu.com/s/ ...

  5. ubuntu16.04 安装 oracle11g (2022.6.5)

    ubuntu16.04 安装 oracle11g (2022.6.5) 参考博客如下: 原文链接:https://www.nakivo.com/blog/how-to-install-oracle-o ...

  6. MIT 6.S965 韩松课程 04

    Lecture 04: Pruning and Sparsity (Part II) 文章目录 Lecture 04: Pruning and Sparsity (Part II) 剪枝率 分析每层的 ...

  7. Ubuntu 16.04直接升级至20.04 (Upgrade from 16.04 to 20.04 directly)

    I. Ubuntu虽然继承于Debian,使用修改source.list的方式进行升级是可行的,但是一般情况下的发行版升级都会使用do-release-upgrade. Ubuntu在同一个LTS的区 ...

  8. Database And RDBMS Concept

    What is Data? Data is information converted into binary digital form. A bit is the smallest unit of ...

  9. 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 集群(续)

    DBA:Linux    下载  Oracle 数据库 11g    标签 linux, rac, clustering, 全部 在 Oracle Enterprise Linux 和 iSCSI 上 ...

最新文章

  1. SpringBoot面试题(持续整理中……)
  2. About LOCAL_PRIVATE_PLATFORM_APIS in Android.mk
  3. java求最大公约数(分解质因数)
  4. bash变量和逻辑运算
  5. 如何配置charles_抓包工具--charles(青花瓷)及获取AppStore数据包
  6. DevToys - 开发人员的瑞士军刀
  7. 【渝粤教育】广东开放大学 商务英语听说 形成性考核 (37)
  8. feed流和瀑布流_基础知识讲解:什么是feed流?(图文)
  9. pytorch梯度下降函数_Pytorch学习笔记6:激活函数/单层感知机/梯度下降求最小值实例...
  10. 【服务器防护】centos iptables 防火墙设置 mac过滤
  11. Ubuntu12.04安装nginx并测试
  12. MYSQL的Commit与程序的原子性
  13. 如何使用Javascript复制到剪贴板
  14. 初中计算机授课教案模板,初中课程教案模板
  15. CSDN学霸课表——来,这有一份PS入门速效大法
  16. ctrl+鼠标滚轮 设置pycharm字体大小
  17. 开博第一篇~申请博客理由
  18. openlayers6 解决调用百度地图之瓦片偏移、坐标偏移、无限拖动裂缝偏移问题
  19. 【基于MATLAB的火灾疏散模拟仿真】——安全隐患提前发现,疏散方案优化
  20. 85D - Sum of Medians

热门文章

  1. 丘成桐讲数学简史(2小时完整视频)
  2. C语言 :用条件语句 if 来做 三只小猪称体重
  3. steam 好友网络无法访问解决方法
  4. 计算机数据的平均函数是,excel软件中数据的平均值怎么求取
  5. 伊利诺理工大学计算机科学硕士,美国伊利诺伊理工大学计算机科学硕士
  6. 8,xilinx 7系列FPGA理论篇——slice篇简介
  7. 圆里面画一个最大的正方形_在圆里画一个最大的正方形发现了什么
  8. oracle变成大写快捷键,Oracle函数(把每个单词首个字母变为大写)
  9. NVIDIA Jetson平台上TensorRT加速YOLOV3,V4及V5系列参考例程分享
  10. 差分方程模型(一):模型介绍与Z变换