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

2024-01-06 18:36

本文主要是介绍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 能够破译元组的内容,它需要维护一个内部目录,告诉它有关数据库的元数据:

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

这篇关于CMU15-445-Spring-2023-Project #1 - 前置知识(lec01-04)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/577238

相关文章

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

Springboot控制反转与Bean对象的方法

《Springboot控制反转与Bean对象的方法》文章介绍了SpringBoot中的控制反转(IoC)概念,描述了IoC容器如何管理Bean的生命周期和依赖关系,它详细讲解了Bean的注册过程,包括... 目录1 控制反转1.1 什么是控制反转1.2 SpringBoot中的控制反转2 Ioc容器对Bea

Spring Cloud Hystrix原理与注意事项小结

《SpringCloudHystrix原理与注意事项小结》本文介绍了Hystrix的基本概念、工作原理以及其在实际开发中的应用方式,通过对Hystrix的深入学习,开发者可以在分布式系统中实现精细... 目录一、Spring Cloud Hystrix概述和设计目标(一)Spring Cloud Hystr

Spring Boot整合消息队列RabbitMQ的实现示例

《SpringBoot整合消息队列RabbitMQ的实现示例》本文主要介绍了SpringBoot整合消息队列RabbitMQ的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录RabbitMQ 简介与安装1. RabbitMQ 简介2. RabbitMQ 安装Spring

springMVC返回Http响应的实现

《springMVC返回Http响应的实现》本文主要介绍了在SpringBoot中使用@Controller、@ResponseBody和@RestController注解进行HTTP响应返回的方法,... 目录一、返回页面二、@Controller和@ResponseBody与RestController

JAVA集成本地部署的DeepSeek的图文教程

《JAVA集成本地部署的DeepSeek的图文教程》本文主要介绍了JAVA集成本地部署的DeepSeek的图文教程,包含配置环境变量及下载DeepSeek-R1模型并启动,具有一定的参考价值,感兴趣的... 目录一、下载部署DeepSeek1.下载ollama2.下载DeepSeek-R1模型并启动 二、J

springboot rocketmq配置生产者和消息者的步骤

《springbootrocketmq配置生产者和消息者的步骤》本文介绍了如何在SpringBoot中集成RocketMQ,包括添加依赖、配置application.yml、创建生产者和消费者,并展... 目录1. 添加依赖2. 配置application.yml3. 创建生产者4. 创建消费者5. 使用在

Spring Retry 实现乐观锁重试实践记录

《SpringRetry实现乐观锁重试实践记录》本文介绍了在秒杀商品SKU表中使用乐观锁和MybatisPlus配置乐观锁的方法,并分析了测试环境和生产环境的隔离级别对乐观锁的影响,通过简单验证,... 目录一、场景分析 二、简单验证 2.1、可重复读 2.2、读已提交 三、最佳实践 3.1、配置重试模板

Spring中@Lazy注解的使用技巧与实例解析

《Spring中@Lazy注解的使用技巧与实例解析》@Lazy注解在Spring框架中用于延迟Bean的初始化,优化应用启动性能,它不仅适用于@Bean和@Component,还可以用于注入点,通过将... 目录一、@Lazy注解的作用(一)延迟Bean的初始化(二)与@Autowired结合使用二、实例解

SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)

《SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)》本文介绍了如何在SpringBoot项目中使用Jasypt对application.yml文件中的敏感信息(如数... 目录SpringBoot使用Jasypt对YML文件配置内容进行加密(例:数据库密码加密)前言一、J