分布式数据库30讲
王磊
光大银行首席数据架构师
新⼈⾸单¥19.9
2368 人已学习
课程目录
已更新 22 讲 / 共 33 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词|为什么要学习分布式数据库?
免费
基础篇 (8讲)
01|什么是分布式数据库?
02|强一致性:那么多数据一致性模型,究竟有啥不一样?
03|强一致性:别再用BASE做借口,来看看什么是真正的事务一致性
04 | 架构风格:NewSQL和PGXC到底有啥不一样?
05 | 全局时钟:物理时钟和逻辑时钟你Pick谁?
06 | 分片机制:为什么说Range是更好的分片策略?
07 | 数据复制:为什么有时候Paxos不是最佳选择?
08 | 基础篇大串讲:重难点回顾+思考题答疑+知识全景图
开发篇 (13讲)
09|原子性:2PC还是原子性协议的王者吗?
10 | 原子性:如何打破事务高延迟的魔咒?
11|隔离性:读写冲突时,快照是最好的办法吗?
12 | 隔离性:看不见的读写冲突,要怎么处理?
13 | 隔离性:为什么使用乐观协议的分布式数据库越来越少?
14 | 隔离性:实现悲观协议,除了锁还有别的办法吗?
15 | 分布式事务串讲:重难点回顾+思考题答疑+知识全景图
16 | 为什么不建议你使用存储过程?
17 | 为什么不建议你使用自增主键?
18 | HTAP是不是赢者通吃的游戏?
19 | 查询性能优化:计算与存储分离架构下有哪些优化思路?
20 | 关联查询:如何提升多表Join能力?
21 | 查询执行引擎:如何让聚合计算加速?
分布式数据库30讲
15
15
1.0x
00:00/00:00
登录|注册

20 | 关联查询:如何提升多表Join能力?

王磊 2020-09-23
你好,我是王磊,你也可以叫我 Ivan。
今天,我们会继续学习查询场景中的处理技术。这一讲的关键词是“多表关联”,也就是数据库中常见的 Join 操作。无论是单体数据库还是分布式数据库,关联操作的语义始终没有变,一些经典算法也保持了很好的延续性。
关联算法作为一个稍微细节点的设计,在不同数据库中是有差异的,我们还是秉承课程的整体思路,不陷入具体的设置参数、指令等内容。这样安排的依据是,只要你掌握关联算法的基本原理,就能快速掌握具体数据库的实现了。同时,有了这些原理作为基础,你也能更容易地掌握分布式数据库的优化思路。
那么,我们先来看看这些经典的关联算法吧。

三类关联算法

常见的关联算法有三大类,分别是嵌套循环(Nested Loop Join)、排序归并(Sort-Merge Join)和哈希(Hash Join)。

嵌套循环连接算法

所有的嵌套循环算法都由内外两个循环构成,分别从两张表中顺序取数据。其中,外层循环表称为外表(Outer 表),内层循环表则称为内表(Inner 表)。因为这个算法的过程是由遍历 Outer 表开始,所以 Outer 表也称为驱动表。在最终得到的结果集中,记录的排列顺序与 Outer 表的记录顺序是一致的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《分布式数据库30讲》,如需阅读全部文章,
请订阅文章所属专栏新⼈⾸单¥19.9
立即订阅
登录 后留言

精选留言(7)

  • Jxin
    重分布这个有疑惑: 如果我有多个关联查询呢?每次关联查询都重分布?这样重分布就可能是个死循环了。因为A关联查询和B关联查询的重分布,可能会相互影响。

    作者回复: 多表关联会被拆解成多个阶段执行,21讲正好有个例子,可以关注下。

    2020-09-23
    1
    1
  • 游弋云端
    “在计算逻辑允许的情况下,建立阶段选择数据量较小的表作为 Inner 表”,我的问题就是在什么情况下,系统无法根据数据量决定 Inner 表呢?
    答复:如果连接属性本身内容重复较多,但是表格很大,这样反而选择较大的表格作为 Inner 表,可以根据内容相同,从而节省Hash的计算资源。想到这种场景。
    2020-09-24
  • 赵见跃
    哈希算法,“在计算逻辑允许的情况下,建立阶段选择数据量较小的表作为 Inner 表”,我的问题就是在什么情况下,系统无法根据数据量决定 Inner 表呢?这个问题,也很困惑,大家给指点一下呀,谢谢。
    2020-09-24
  • 有铭
    Grace这个最早使用GHJ算法数据库没有查到啊?

    很久以前就困惑传统数据库在分表分库后如何解决joint的问题。今天看到这篇文章后豁然开朗
    2020-09-23
  • piboye
    复制表,写的时候也是异步复制到其他节点上?
    2020-09-23
  • licl1008
    数据量小的一侧不是构建侧,这种情况不能单单根据数据量来决定innner
    2020-09-23
  • 扩散性百万咸面包
    我对重分布的理解:按照某个非分区键再做一遍重分区。

    对于这个思考题,应该是两个关联表的大小都远远超过了单机的内存?所以必须要上分布式?
    2020-09-23
收起评论
7
返回
顶部