CMU 15-445 -- Distributed OLAP Databases -21

news2024/10/2 22:22:13

CMU 15-445 -- Distributed OLAP Databases -21

  • 引言
  • OLTP and OLAP
  • Star Schema vs. Snowflake Schema
  • Problem Setup
  • 本节大纲
  • Execution Models:Push vs. Pull
    • Example #1: Push Query to Data in Shared-Nothing Architecture
    • Example #2: Pull Data to Query in Shared-Disk Architecture
  • Query Fault Tolerance
  • Query Planning
    • Approach #1: Physical Operators
    • Approach #2: SQL
  • Distributed Join Algorithms
    • Scenario #1
    • Scenario #2
    • Scenario #3
    • Scenario #4
    • Semi-Join
  • Cloud Systems
    • Serverless Databases
    • Disaggregated Components
      • Universal Formats
  • 小结


引言

本系列为 CMU 15-445 Fall 2022 Database Systems 数据库系统 [卡内基梅隆] 课程重点知识点摘录。


OLTP and OLAP

众所周知,数据库有两种典型使用场景,OLTP 和 OLAP。线上服务与 OLTP 数据库交互,OLTP 数据库再被异步地导出到 OLAP 数据库中作离线分析,如下图所示:

在这里插入图片描述
OLTP 数据库就是 OLAP 数据库的前端,通过 ETL 的过程,OLTP 数据库中的数据将被清理、重新整理到 OLAP 数据库上。OLAP 数据库为用户提供复杂的数据查询、分析能力,帮助公司:分析过去和预测未来。


Star Schema vs. Snowflake Schema

ETL 的过程并不只是简单地移动,通常还会涉及表结构的重新整理,以提高后续查询分析的效率。最常见的两种 schema 就是 Star Schema 和 Snowflak Schema:

在这里插入图片描述
Star Schema 就是一个星形拓扑结构,处在最中间的是 Fact Table,通常记录着业务流程中的核心事件、指标,如成单记录;处在四周的是 Dimension Tables,记录一些补充信息。Fact Table 通过外键与 Dimension Tables 关联,用户可以通过简单的 Join 来分析数据。在 Star Schema 中,只能允许有一层的引用关系,在 Snowflake Schema 中,则允许有两层关系,如:

在这里插入图片描述
二者的区别、权衡主要在于以下两个方面:

  • Normalization:Snowflake Schema 的规范化 (Normalization) 级别更高,冗余信息更少,占用空间更少,但会遇到数据完整性和一致性问题。
  • Query Complexity:Snowflake Schema 在查询时需要更多的 join 操作才能获取到查询所需的所有数据,速度更慢。

Problem Setup

想象下面这个最简单的分析场景:

  • 一个 join 语句需要访问所有数据库分片

在这里插入图片描述

  • 要满足这样的需求,最简单的做法就是,将所有相关的数据读取到某一个分片上,然后统一计算

在这里插入图片描述
但这在 OLAP 场景下是不可行的。通常 OLAP 就需要访问全量数据,遇到全量数据无法装进一个分片中的情况,就无计可施了。


本节大纲

  • Execution Models
  • Query Planning
  • Distributed Join Algorithms
  • Cloud Systems

Execution Models:Push vs. Pull

大体上,查询的执行模式分为两种:

  • Approach #1: Push Query to Data
    • 将查询、或查询的一部分发送到拥有该数据的节点上
    • 在相应的节点上执行尽可能多的过滤、预处理操作,将尽量少的数据通过网络传输返回
  • Approach #2: Pull Data to Query
    • 将数据移动到执行查询的节点上,然后再执行查询获取结果

对于数据库来说,Push Query to Data 和 Pull Data to Query 并不是非此即彼的选择,在不同类型的分布式数据库、不同的查询执行阶段上,也有可能使用不同的执行模式。

Example #1: Push Query to Data in Shared-Nothing Architecture

在这里插入图片描述
如上图所示:应用程序将查询请求发到上方的节点,称为节点 A。节点 A 发现 ID 在 1-100 之间的数据就在本地存储;而 ID 在 101-200 之间的数据位于下方的节点,称为节点 B。因此节点 A 将查询发给节点 B,由节点 B 负责将 101-200 之间的数据 join,然后将 join 的结果返回给节点 A,而节点 A 则自行将 1-100 之间的数据 join,最终节点 A 将所有数据整理好返回给应用程序。整个过程对应用程序透明。


Example #2: Pull Data to Query in Shared-Disk Architecture

在这里插入图片描述
如上图所示:在 shared-disk 架构下,节点 A 可以将计算分散到不同的节点上,如 1-100 的在 A 节点上计算;101-200 的在 B 节点上计算。A,B 拿到计算任务后,就将各自所需的数据 (page ABC、XYZ) 从共享的存储服务中取出放到本地。这个取数据的过程就是 Pull Data to Query。当 B 节点中的计算任务执行完后,B 节点将结果返回给 A 节点,A 节点再将自己的结果与 B 节点的结果结合,得到最终的结果返回给应用程序:

在这里插入图片描述
后面这步又有点类似 Push Query to Data,因此我们需要注意 Push 和 Pull 并不是在一次查询执行过程中只能取其一,也可能是一种混合过程。


Query Fault Tolerance

每个节点都会有自己的缓存管理器,从其它计算节点获取的数据可能会被缓存在本地的缓存池中,方便缓存中间结果,我们甚至可以将这些中间结果持久化的本地磁盘中的临时文件,这允许我们缓存比内存更大的数据,但这些数据在重启之后都会消失,那么对一个需要运行很长时间的 OLAP 查询来说,如果一个节点挂了怎么办?

对于 OLTP 数据库,有大量的写事务,一旦告诉客户端事务提交成功,那么它必须保证规定范围内的故障不会导致数据丢失;对于 OLAP 数据库,只有读请求,几乎没有数据库选择向用户提供类似的容错机制,一个查询在执行过程中如果遇到节点故障,就直接返回错误,让用户重试。当然,如果真的面对常常会遇到故障的场景,一些 OLAP DBMS 可以选择存储中间结果的快照数据,在节点故障后能恢复当时的部分执行结果,避免重复计算。


Query Planning

我们在单机数据库上讨论过的所有优化,在分布式场景下同样适用,如:

  • Predicate Pushdown
  • Early Projections
  • Optimal Join Orderings

当然,分布式查询优化还需要考虑数据的位置信息、数据移动的成本,因此分布式查询肯定需要将查询的过程分解成多个部分 (Query Plan Fragments),可以并行执行,从而最大程度地利用分布式系统的扩展性。分布式数据库的查询优化主要有两种粒度:Physical Operators、SQL。


Approach #1: Physical Operators

先生成一个查询计划,再将它按数据分片信息 (partition-specific) 分解成多个部分,分发给不同的节点。大部分数据库采用的就是这种做法。

Approach #2: SQL

将原始的 SQL 语句按分片信息重写成多条 SQL 语句,每个节点自己在本地作查询优化。AP 说他只见过 MemSQL 采用了这种方案,举例如下:

在这里插入图片描述


Distributed Join Algorithms

在刚才的讨论中,我们利用了这样一句 SQL 语句:

SELECT * FROM R JOIN S ON R.id = S.id

但我们忽略了一个细节,即我们假设 R 和 S 表中 id 在相同范围内的数据位于同一个节点上。这样的假设并不现实。实际上,要获得 R 和 S join 的结果,我们还需要先将 join 所需的数据移动到同一个节点上。一旦移动完毕,我们就可以使用之前学习的单机 join 算法完成余下的计算。

下面讨论这条 SQL 在不同场景下的 join 执行过程:

Scenario #1

参与 Join 的两张表中,其中一张表 (假设为 S 表) 复制到了所有节点上,那么每个节点按 R 表的分片信息执行 join,最后聚合到 coordinating node 上即可:

在这里插入图片描述

Scenario #2

恰好 R 和 S join 的字段就是 partition 的字段,那么每个节点本地 join,最后聚合到 coordinating node 上即可,与我们之前的假设一致:

在这里插入图片描述

Scenario #3

如果 R 和 S 是根据不同 key 来分片,其中一张表 (S) 的 key 不是 join key 且数据量很小,那么 DBMS 可以将这张小表广播到所有需要执行计算的节点上,这样执行时就可以按 R 的分片信息来执行,最后汇总结果:

  • R按照ID分片,S按照Val分片
    在这里插入图片描述
  • 左边分片将 S 表的部分数据同步到右边分片

在这里插入图片描述

  • 右边分片将 S 表的部分数据同步到左边分片

在这里插入图片描述

  • 分别在两个节点上执行 Join 操作,然后汇总结果并返回

在这里插入图片描述


Scenario #4

两张表都不是按照 join key 来分片。DBMS 需要将数据表按照 join key 重新洗牌,挪动到对应的位置,再执行 join 操作:

  • R 和 S 都不是按照 join key 分片

在这里插入图片描述

  • 将 R 表中 id 为 101-200 的数据移动到右边节点

在这里插入图片描述

  • 将 R 表中 id 为 1-100 的数据移动到左边节点

在这里插入图片描述

  • 将 S 表中 id 为 101-200 的数据移动到右边节点

在这里插入图片描述

  • 将 S 表中 id 为 1-100 的数据移动到左边节点

在这里插入图片描述

  • 在两个节点上执行 Join

在这里插入图片描述

  • 合并结果并返回

在这里插入图片描述


Semi-Join

semi-join 指的是当 join 的结果只需要左边数据表的字段,右边数据表的字段仅仅是用来做筛选的情况。在分布式数据库中,可以对这种特殊情况优化数据移动量,从而减少 join 成本。一些数据库支持 semi-join 的 SQL 语法,如果不支持则可以使用 EXISTS 语法来模拟:

SELECT R.id FROM R
 WHERE EXISTS (
   SELECT 1 FROM S
    WHERE R.id = S.id);

这一点很像之前说的 projection pushdown 。

semi-join很像普通的join查询,不过semi-join针对的是不需要右表字段参与计算的场景:

在这里插入图片描述


Cloud Systems

OLAP 数据库的云服务也分为两类:

  • Approach #1: Managed DBMS
    • 将开源单机数据库挪到云上,增加一些小的修改,大多数供应商采用这种做法
  • Approach #2: Cloud-Native DBMS
    • 为云原生环境而设计
    • 通常基于 shared-disk 架构
    • 一些例子包括:Snowflake,Google BigQuery,Amazon Redshift 以及 Microsoft SQL Azure

Serverless Databases

基本思想就是,在空闲期间回收计算资源,租户只需要为存储资源买单,节省租户成本。实现的基本思路就是空闲指标达到一定阈值时,将 Buffer Pool Page Table 持久化:

在这里插入图片描述
当活跃请求到来时,再将其载入到内存中:
在这里插入图片描述


Disaggregated Components

一些云服务商也提供 OLAP 数据库所需的模块服务,如:

  • System Catalogs
    • HCatalog
    • Google Data Catalog
    • Amazon Glue Data Catalog
  • Node Management
    • Kubernetes
    • Apache YARN
    • Cloud Vendor Tools
  • Query Optimizers
    • Greenplum Orca
    • Apache Calcite

Universal Formats

大多数 DBMS 都使用自主设计研发的二进制文件格式存储数据,因此在异构 DBMS 之间共享数据的唯一方法就是将这些数据转化成一些常见的文本格式,如 csv,json,xml 等。为了解决这个问题,也有一些开源的二进制文件格式出现:

在这里插入图片描述


小结

More money, more data, more problems… 这句话是CMU 15-445这门课程的结束语,下一步大家可以进入数据库高级课程学习:

  • cmu15-721 – 高级数据库系统

同时作为cmu 15-445配套教材的帆船书也非常值得一看:
在这里插入图片描述
还有就是cmu 15-445 对应课程lab, 相比MIT 6.830的实现来说更有挑战性。

最后就是阅读相关开源数据库的源码。

本节对应教材PDF

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ARP协议原理与应用

ARP协议原理与应用 一、ARP协议概述1.1、场景描述1.2、ARP协议概述 二、ARP协议工作原理2.1、ARP工作流程2.2、ARP工作原理2.3、ARP缓存表 三、ARP协议分类3.1、免费ARP(Gratuitous ARP )3.2、代理ARP(Proxy ARP )3.3、RARP与IARP…

详解lambda表达式(一):表达式定义与异常处理

目录 一、lambda表达式 二、lambda表达式实现函数接口 2.1 函数式接口 2.2 lambda表达式实现无参抽象方法 2.3 lambda表达式实现有参抽象方法 2.4 lambad表达式使用代码块 三、lambda表达式调用外部变量 3.1 lambda表达式可以更改类成员变量 3.2 lambda表达式无法更改…

jvs-rules API数据源配置说明(含配置APIdemo视频)

在JVS中,多数据源支持多种形态的数据接入,其中API是企业生产过程中常见的数据形态。使用数据源的集成配置,以统一的方式管理和集成多个API的数据。这些平台通常提供各种数据转换和处理功能,使得从不同数据源获取和处理数据变得更加…

datax-web报错收集

在查看datax时发现日志出现了如上错误,因为项目是部署在本地linux虚拟机上的,使用的是nat网络地址转换,不知道为什么虚拟机的端口号发生了变化,导致数据库根本连接不进去,更新linux虚拟机的ip地址就好

【Wamp】安装 | 局域网内设备访问

安装教程: https://wampserver.site/article/1.html 下载 https://www.wampserver.com/en/ 安装路径上不能有中文 安装好之后图标呈绿色 放入网页文件 将网页文件放置于wamp文件夹的www子文件夹 例如:\Wamp\program\www 修改http端口 WAMP服务器…

9.2.2Socket(TCP)

一.过程: 1.建立连接(不是握手),虽然内核中的连接有很多,但是在应用程序中,要一个一个处理. 2. 获取任务:使用ServerSocket.accept()方法,作用是把内核中的连接获取到应用程序中,这个过程类似于生产者消费者模型. 3. 使用缓冲的时候,注意全缓冲和行缓冲. 4.注意关闭文件资源…

docker复现nginx错误配置漏洞

目录 一、nginx环境搭建 1.1搭建步骤 二、docker复现Nginx配置漏洞 2.1安装docker 2.2复现过程 2.1CRLF(carriage return/line feed)注入漏洞 2.2.目录穿越 一、nginx环境搭建 1.1搭建步骤 1.先创建Nginx的目录并进入(命令如下) mkdir /soft &&…

Word 2019打开.doc文档后图片和公式不显示(呈现为白框)的解决办法

Word 2019打开.doc文档后图片和公式不显示(呈现为白框)的解决办法 目录 Word 2019打开.doc文档后图片和公式不显示(呈现为白框)的解决办法一、问题描述二、解决方法1.打开 WORD 2019,点击菜单中的“文件”;…

管理类联考——逻辑——论证逻辑——汇总篇——真题和典例——推论

推论 1. 推出结论题 199-2011-1-28——推出结论题——若题干无论点,考虑:(1)大多数情况,考虑:直接将选项代入题干。 一般将缅甸所产的经过风化或经河水搬运至河谷、河床中的翡翠大砾石,称为“…

棒球课堂的发展规划·棒球联盟

棒球课堂的发展规划 1. 棒球课堂的发展环境 探讨棒球课堂如何通过运用创新的教学方法来适应不断变化的市场需求。包括但不限于,科学地运用大数据和人工智能技术来提高教学效率,加强教师队伍的专业培训,以及拓展课外活动,增强学生…

【论文阅读】DEPCOMM:用于攻击调查的系统审核日志的图摘要(SP-2022)

Xu Z, Fang P, Liu C, et al. Depcomm: Graph summarization on system audit logs for attack investigation[C]//2022 IEEE Symposium on Security and Privacy (SP). IEEE, 2022: 540-557. 1 摘要 ​ 提出了 DEPCOMM,这是一种图摘要方法,通过将大图划…

【PythonRS】植被显示增强(多光谱、正射、照片等)

很多时候我们需要某个区域的正射图,虽然正射图一般都运用了匀色的算法,整体色彩比较均衡。但如果研究区内有大量的植被,这个时候植被突出显示就很有必要了。所以今天给大家分享一下使用Python对多光谱、正射影像进行植被显示增强的算法。 一、…

视频怎么变成gif表情包?在线视频转动图怎么做?

当我们在电脑上观看视频时,有时会遇到一些有趣的片段,如果想把这些视频转gif图片,就需要用到视频转gif工具(https://www.gif.cn),今天分享一个使用视频在线转gif功能来完成gif制作的方法,下面是…

代谢组学市场分析,制药及生物制药行业正在推动全球代谢组学产业的发展

代谢组学是对某一生物或细胞所有小分子量代谢产物进行定性和定量分析的一门新兴学科,其揭示的小分子代谢产物变化是机体内基因、蛋白质/酶等功能变化的一系列事件的最终结果,直接反映了生物体系的最终状态,可以反映机体特定病理生理状态下整体…

UML-时序图

目录 时序图 时序图构成: 对象: 消息: 生命线(激活): 活动条: 时序图举例: 时序图 时序图也叫顺序图、序列图. 时序图描述按照时间的先后顺序对象之间的动作过程,是由生命线和消息组成 时序图构成: 对象: 对象是类的实例,对象是通过类来创建的&…

【STM32RT-Thread零基础入门】 3. PIN设备(GPIO)的使用

硬件:STM32F103ZET6、ST-LINK、usb转串口工具、4个LED灯、1个蜂鸣器、4个1k电阻、2个按键、面包板、杜邦线 文章目录 前言一、PIN设备介绍1. 引脚编号获取2. 设置引脚的输入/输出模式3. 设置引脚的电平值4. 读取引脚的电平值5. 绑定引脚中断回调函数6. 脱离引脚中断…

微信开发之获取收藏夹列表的技术实现

简要描述: 获取收藏夹内容 请求URL: http://域名地址/weChatFavorites/favSync 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数…

深度使用苹果M1 Mac电脑一个月后的发现与问题解决

自从苹果推出M1芯片的Mac电脑后,其强大的性能和高效的能耗管理引起了广泛关注。许多人纷纷购买了这款新一代的Mac电脑,并深度使用了一个月。然而,在长时间使用的过程中,一些问题也逐渐浮现出来。本文将分享在深度使用苹果M1 Mac电…

【C++】dynamic_cast基本用法(详细讲解)

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

研究论文关于火灾的烟雾探测

普拉萨梅什加德卡尔 探索所有模型以选择最佳模型。 一、介绍: 烟雾探测器检测烟雾并触发警报以提醒他人。通常,它们存在于办公室、家庭、工厂等。通常,烟雾探测器分为两类: Photoelectric Smoke Detector- 设备检测光强度&#x…