CMU15-445-Spring-2023-Project #1 - 前置知识(lec01-04)

Lecture #01_ Relational Model & Relational Algebra

Databases

数据库是相互关联的数据的有组织集合,对现实世界的某些方面进行建模。区别于DBMS(MySQL、Oracle)。

Flat File Strawman

数据库以CSV文件的形式存储,并由DBMS管理。
image.png

Database Management System

DBMS是允许应用程序在数据库中存储和分析信息的软件。
数据模型(data model)是描述数据库中数据的概念集合。e.g. relational、NoSQL、vectors。
模式(schema)是对基于数据模型的特定数据集合的描述。

Relational Model

关系模型定义了一种基于关系的数据库抽象,以避免维护开销。
image.png
relation是一组无序集合,允许重复元素出现,等价于table。
tuple(domain)代表relation中的一组属性,带有n条属性的relation叫做n-ary relation。
relation中primary key唯一标识一个元组。
foreign key指定一个关系中的属性必须映射到另一个关系中的元组。

Data Manipulation Languages (DMLs)

image.png

Relational Algebra

关系代数是一组基本操作,用于检索和操作关系中的元组。

  • Selectimage.png
  • Projectionimage.png
  • Unionimage.png
  • Intersectionimage.png
  • Differenceimage.png
  • Productimage.png
  • Join:根据共有的属性中的相同值进行连接,并去除重复列。image.png

Lecture #02_ Modern SQL

Relational Languages

关系代数基于集合set(无序、无重复)。SQL基于包bag(无序,允许重复)。

SQL History

image.png

Joins

合并一个或多个表中的列,生成一个新表。用于表达涉及跨多个表的数据的查询。
image.png

Aggregates

  • aggregation functionimage.png
  • DISTINCT keyword
  • GROUP BYimage.png
  • HAVINGimage.png

String Operations

SQL标准规定字符串区分大小写,且只允许单引号。
LIKE keyword:“%”匹配任意字串,包含空;“_”匹配任意单个字符。
“||”:将两个或多个字符串连接成一个字符串。

Date and Time

操作DATE和TIME属性。

Output Redirection

image.png
列数和type需要一致,列名不需要。

Output Control

  • ORDER BYimage.png
  • LIMITimage.png

Nested Queries

image.png
image.png

Window Functions

ROW_NUMBER():当前行的编号。在窗口函数排序前计算。
RANK():当前行的顺序位置。在窗口函数排序后计算。
OVER clause:指定计算窗口函数时如何将tuple分组。 使用 PARTITION BY 指定分组。使用 GROUP BY 排序。
image.png

Common Table Expressions

临时表,其作用域仅限于单个查询。
image.png
在 WITH 后添加 RECURSIVE 关键字,可以让 CTE 引用自身。
image.png

Lecture #03_ Database Storage (Part I)

Storage

关注面向磁盘的DMS,即数据库存储在非易失磁盘上。
DBMS需要关注如何将在非易失磁盘与易失memory之间移动数据。由于从磁盘获取数据的速度非常慢,DBMS将重点关注隐藏磁盘的延迟,而不是对寄存器和高速缓存进行优化。
image.png

Disk-Oriented DBMS Overview

数据库全部在磁盘上,数据库文件中的数据按页组织,第一页是目录页。
要对数据进行操作,DBMS需要将数据带入内存。为此,数据库管理系统需要一个**缓冲池(buffer pool)**来管理数据在磁盘和内存之间的移动。DBMS还有一个执行引擎来执行查询。执行引擎会向缓冲池请求一个特定页面,缓冲池会负责将该页面带入内存,并向执行引擎提供一个指向内存中该页面的指针。缓冲池管理器将确保在执行引擎对内存中的该部分进行操作时,页面仍然存在。

DBMS vs. OS

实现虚拟内存的一种方法是使用 mmap (memory mapping)将文件内容映射到进程的地址空间,这样操作系统就可以负责在磁盘和内存之间来回移动页面。但是如果 mmap 遇到页面错误,进程就会被阻塞。
image.png

File Storage

DBMS 的最基本形式是将数据库存储为磁盘上的文件。操作系统对这些文件的内容一无所知。只有 DBMS 知道如何破译它们的内容,因为这些内容是以 DBMS 特有的方式编码的。 DBMS 的存储管理器负责管理数据库的文件。它将文件表示为页面集合。它还会跟踪哪些数据已被读取和写入页面,以及这些页面中还有多少可用空间。

Database Pages

DBMS 在一个或多个文件中以固定大小的数据块(称为页)组织数据库。页面可以包含不同类型的数据(tuple、index等)。大多数系统不会在页面中混合这些类型的数据。
每个页面都有一个唯一的标识符。如果数据库是一个单独的文件,那么页面 ID 可以只是文件偏移量。大多数数据库管理系统都有一个间接层,将页面 ID 映射到文件路径和偏移量。
大多数 DBMS 使用固定大小的页面,以避免支持可变大小页面所需的工程开销。
存储设备保证以原子方式写入硬件页的大小。如果硬件页面为 4 KB,而系统尝试向磁盘写入 4 KB,那么要么 4 KB 全部写入,要么全部不写入。

Database Heap

堆文件是一个无序的页面集合,其中的tuples以随机顺序存储。可以在磁盘上找到 DBMS 需要的页面位置。
DBMS 在给定页面 ID 的情况下找到磁盘上的页面的方法:

  • Linked List:页眉页持有指向空闲页列表和数据页列表的指针。但是,如果 DBMS 要查找特定页面,则必须对数据页列表进行顺序扫描,直到找到要查找的页面。
  • Page Directionary:DBMS 维护特殊页面,跟踪数据页面的位置以及每个页面上的可用空间。

Page Layout

image.png
image.png
image.png

Tuple Layout

image.png
非规范化元组数据(Denormalized Tuple Data):如果两个表有关联,DBMS就可以 "预连接 "它们,这样这两个表就会出现在同一个页面上。这使得读取更快,因为数据库管理系统只需加载一个页面,而不是两个独立的页面。不过,由于数据库管理系统需要为每个元组提供更多空间,因此更新成本会更高。

Lecture #04_ Database Storage (Part II)

Log-Structured Storage

page layout如果是slotted page的话,会有一些问题:tuple的删除;读取一个tuple需要读取整个block;tuple的更新可能需要花费大量时间切换block。
log structure DBMS不存储tuple,只存储log。

  • log包含元组的唯一标识符、操作类型(PUT/DELETE)以及元组的内容;
  • 倒序扫描读取记录,同时可以使用索引跳转到日志中的特定位置;
  • 由于写入是顺序的,所以速度很快;
  • 可以定期压缩日志,方法是在多个页面中只记录每个元组的最新变化;
  • 压缩后,由于每个元组只有一个,不再需要排序,因此DBMS可以按 id 排序,以加快查找速度。这些表称为排序字符串表(Sorted String Tables,SSTables);
  • 缺点是压缩成本较高,还会导致写入放大(重复写入相同的数据);

image.pngimage.png

Data Representation

有五种高级数据类型可以存储在元组中:

  • Integers
    • Examples: INTEGER, BIGINT, SMALLINT, TINYINT.
  • Variable Precision Numbers
    • Examples: FLOAT, REAL.
  • Fixed-Point Precision Numbers
    • Examples: NUMERIC, DECIMAL.
  • Variable-Length Data
    • Examples: VARCHAR, VARBINARY, TEXT, BLOB.
  • Dates and Times
    • Examples: TIME, DATE, TIMESTAMP.

System Catalogs

为了让 DBMS 能够破译元组的内容,它需要维护一个内部目录,告诉它有关数据库的元数据:

  • 表和列,以及这些表上的任何索引;
  • 数据库用户及其权限;
  • 有关表格及其包含内容的统计信息(如属性的最大值);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/326577.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

half-angle slicing半角切片技术

首先理解阴影的本质,光照被其他体素遮挡了。 Adding shadows to the volume lighting model means that light gets attenuated through the volume before being reflected back to the eye. 体渲染(volume rendering)算法包括ray casting、…

leecode-代码随想录-学习笔记1

编程语言基础课,重新学习 kamacoder.com 基础语法;ACM输入输出通用模板;之前Java狂神说的学习笔记(但是还是按照编程习惯用了C,感觉更底层好写代码)。 正式开始: 下面按照题目-我的解答思路和…

JS的防抖和节流

目录 防抖 搜索框带来的问题 实现的思路 案例 封装防抖函数 节流 滚动条加载带来的问题 实现的思路 案例 封装节流函数 防抖 搜索框带来的问题 需求&#xff1a;根据输入框内容来请求数据 <!DOCTYPE html> <html lang"en"> <head><…

MybatisPlus—快速入门

目录 1.使用MybatisPlus的基本步骤 1.1引入MybatisPlus的起步依赖 1.2 定义Mapper 2.MybatisPlus常用注解 2.1 TableName 2.2 TableId 2.3 TableField 2.4 小结 3. 常用配置 4. 总结 1.使用MybatisPlus的基本步骤 1.1引入MybatisPlus的起步依赖 MyBatisPlus官方提…

如何评判一款智能酒精壁炉品质是否优秀

在当今家居设计中&#xff0c;智能酒精壁炉作为一种独特的取暖和装饰方式&#xff0c;受到越来越多人的青睐。然而&#xff0c;如何挑选和选择优质的智能酒精壁炉成为了一个重要的话题&#xff0c;下面将深入探讨哪样的智能酒精壁炉才算得上是品质卓越。 优质的智能酒精壁炉通常…

shell 计算两个数据百分比,bc高级运算,bc计算系统磁盘剩余内存

目录 安装运算工具 bc使用方法高级数学库 (直接把公式 给他即可)计算百分比计算内存已经使用的百分比计算圆周率 安装运算工具 bc yum -y install bc使用方法 echo $((10/3)) | bc高级数学库 (直接把公式 给他即可) echo $((24)) | bc -l计算百分比 这里是 bc 的用法 也是计…

Ubuntu20 编译 Android 12源码

1.安装基础库 推荐使用 Ubuntu 20.04 及以上版本编译&#xff0c;会少不少麻烦&#xff0c;以下是我的虚拟机配置 执行命令安装依赖库 // 第一步执行 update sudo apt-get update//安装相关依赖sudo apt-get install -y libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-de…

SpingBoot的项目实战--模拟电商【3.购物车模块】

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于SpringBoot电商项目的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.功能需求 二.代码编写 …

Beauty algorithm(五)眉形

由于dlib检测的眼部关键点缺少下沿点,无法将整个眉形区域表示出来,只能估算 一、skills 前瞻 略 二、目标区域定位 1、眉部关键点 左侧:17,18,19,20,21 右侧:22,23,24,25,26 2、计算roi区域的w,h,center FaceRegion left_eb, right_eb;left_eb.w = landmarks.at(21)…

业务项目中Echarts图表组件的封装实践方案

背景&#xff1a;如果我们的项目是一个可视化类/营销看板类/大屏展示类业务项目&#xff0c;不可避免的会使用到各种图表展示。那在一个项目中如何封装一个图表组件既能够快速复用、UI统一&#xff0c;又可以灵活扩充Echarts的各种复杂配置项配置就变得极为重要。 封装目标 符…

【总线接口】2.学习硬件这些年接触过的硬件接口、总线 · 大汇总

初接触硬件&#xff0c;五花八门的总线、接口一定会让你有些疑惑&#xff0c;我尝试用一系列文章来解开你的疑惑。 系列文章 【总线接口】1.以Xilinx开发板为例&#xff0c;直观的认识硬件接口 【总线接口】2.学习硬件这些年接触过的硬件接口、总线 大汇总 【总线接口】3.常见…

【转载】-财报-丈母娘教咱看财报(资产负债表-利润表-现金流量表)

写在前面 近期&#xff0c;在知乎看到“云峰金融”的一篇关于金融知识的文章《丈母娘教你看财报》&#xff0c;挺有意思的&#xff0c;挑出核心内容&#xff0c;又添加了一些内容的解释&#xff0c;特来分享一下。对于金融入门小白来讲&#xff0c;非常友好。如有不正确的地方&…