当前位置: 首页 > news >正文

SQL 层功能改进 - lookupJoin 的优化

一、传统 join 算法

lookupJoin 是 join 查询的一种,传统 join 算法为:

1. 遍历 A 表,读取一条数据 r

2. 遍历 B 表,对于每条数据,与 r 进行 join 操作

3. 重复 1、2 操作,直到 A 表遍历完所有数据

二、lookupJoin

现有的 lookupJoin 流程为:

1. 遍历 A 表,读取一条数据 r

2. 通过 join key 以及数据 r 构造 B 表数据取值范围

3. 通过构造的取值范围对 B 表进行读取操作,将读取出的数据与 r 进行 join 操作,返回结果

通过这样的做法,join 可减少对 B 表全表扫描的操作,提升执行效率。但是执行 lookupJoin 操作的前提是在 B 表中存在 join key 的索引,否则无法对 B 表构造取值范围。

三、分布式 lookupJoin

1. 分布式 lookupJoin 介绍:

以往 KaiwuDB 集群在执行 lookupJoin 操作时,会提取 A 数据,根据 A 表数据发送 scan 请求去别的节点读取数据。这样会导致大量结果数据集中在 A 表分布的节点,没有充分利用多节点并行执行的优势。

现在,我们将 A 表数据提前通过 hash 重分布路由到多个节点再并行执行 lookupJoin 操作;这样不仅可以提高执行效率,还可以使结果集在多个节点按照 hash key 预分布。

图 1

如图 1 所示,执行 select * from a join b on a.a = b.a 的操作时 B 表中有 join key 的索引 b_a_idx,改进后单节点 lookupJoin 变为三节点执行 lookupJoin 操作,并且使 join 结果集按照 join 列在节点间 hash 分布。

2. 分布式 lookupJoin 对分布式执行产生的效果:

分布式 lookupJoin 可以使 join 结果集按照 join 列在节点间呈现 hash 分布,大大提高了集群节点算力利用率,减少 hash 重分布的次数,缩短整体 query 执行时间。

图 2

如图 2 所示,在图 1 的基础上把 join 结果与 C 表再进行 join 查询:select * from a,b,c where a.a=b.a and a.a = c.a ,模拟复杂查询场景。由于在分布式 lookupJoin 查询后,数据按照 join key 已经在三节点上 hash 分布了,所以在执行与 C 表的 join 操作时,只需要 hash 重分布 C 表的数据,减少了 hash 重分布的次数,提高了执行效率。

3. 分布表的 lookupJoin:

分布表是一种特殊表,表中数据按某列的 hash 值分布在各个节点上,如果分布表的分布列与 hash join 列正好一致,在执行分布式 lookupJoin 时可以直接在各个节点并行执行 lookupJoin,省去了 hash 分布的操作。

相关文章:

SQL 层功能改进 - lookupJoin 的优化

一、传统 join 算法lookupJoin 是 join 查询的一种,传统 join 算法为:1. 遍历 A 表,读取一条数据 r2. 遍历 B 表,对于每条数据,与 r 进行 join 操作3. 重复 1、2 操作,直到 A 表遍历完所有数据二、lookupJo…...

动态规划:鸣人的影分身

在火影忍者的世界里,令敌人捉摸不透是非常关键的。我们的主角漩涡鸣人所拥有的一个招数——多重影分身之术——就是一个很好的例子。影分身是由鸣人身体的查克拉能量制造的,使用的查克拉越多,制造出的影分身越强。针对不同的作战情况&#xf…...

如何为三星active2手表安装自己DIY的表盘

一、步骤介绍 Step 1. 下载Galaxy watch studio; Step 2. 按照up主“隔壁张师傅2022”的文章进行安装。 二、安装流程简单说明: ① 电脑端官网下载并安装Galaxy Watch Designer或者Galaxy Watch Studio程序。 ② 关闭手表蓝牙连接,并打开调…...

Android 项目必备(四十二)-->Android 多窗口模式

简介 自由窗口模式: 该模式类似于常见的桌面操作系统, 应用界面的窗口可以自由的拖动和修改大小。 分屏模式 该模式可以在手机上使用, 该模式将屏幕一分为二, 同时显示两个应用界面。 画中画模式: 该模式主要用于TV, 在该模式下…...

OpenHarmony的未来和如何做好一个开源社区

今天要分享的文章,可能更多只是作为一种观点。主要包括2个内容。OpenHarmony的未来和如何做好一个开源社区,好的,接下来开始今天的内容。 你对OpenHarmony的未来如何看待? OpenHarmony的未来看起来非常光明,因为它具…...

二叉搜索树实现

树的导览 树由节点(nodes)和边(edges)构成,如下图所示。整棵树有一个最上端节点,称为根节点(root)。每个节点可以拥有具有方向的边(directed edges)&#xf…...

解决Spring Data Jpa 实体类自动创建数据库表失败问题

先说一下我遇到的这个问题,首先我是通过maven创建了一个spring boot的工程,引入了Spring data jpa,结果实体类创建好之后,运行工程却没有在数据库中自动创建数据表。 找了半天发现是一个配置的问题! hibernate.ddl-auto节点的配…...

Elasticsearch:创建一个简单的 “你的意思是?” 推荐搜索

“你的意思是” 是搜索引擎中一个非常重要的功能,因为它们通过显示建议的术语来帮助用户,以便他可以进行更准确的搜索。比如,在百度中,我们进行搜索时,它通常会显示一些更为常用推荐的搜索选项来供我们选择&#xff1a…...

urllib之ProxyHandler代理以及CookieJar的cookie内存传递和本地保存与读取的使用详解

处理更高级操作时(Cookies处理,代理设置),需要一个强大的工具Handler,可以理解成各种处理器,有处理登录认证的、有处理Cookies的、有处理代理设置的。利用这些几乎可以做到HTTP请求中所有事情。当中urllib.request模块里的 BaseHa…...

华为造车锚定智选模式, 起点赢家赛力斯驶入新能源主航道

文|螳螂观察 作者| 易不二 近日,赛力斯与华为的一纸联合业务深化合作协议,给了频频猜测赛力斯与华为之间关系的舆论一个明确的定调:智选模式已成为华为与赛力斯共同推动中国新能源汽车产业高质量发展的坚定选择。 自华为智能汽车业务开启零…...

[oeasy]python0096_游戏娱乐行业_雅达利_米洛华_四人赛马_影视结合游戏

游戏娱乐行业 回忆上次内容 游戏机行业从无到有 雅达利 公司 一枝独秀并且带领 行业 发展起来 雅达利公司 优秀员工 乔布斯 在 朋友 帮助下完成了《pong》 Jobs 黑了 Woz 一部分收入 然后拿着钱 去印度禅修了 游戏行业 会如何继续 呢??🤔 灵修 乔布…...

使用python测试框架完成自动化测试并生成报告-实例练习

练习一: 使用unittest 完成自动化测试并使用HttpTestRunner生成报告 1、写个简单的计算器功能,大小写转换功能,随机生成字符串功能 2、编写测试用例,不同的数据(你能想到的所有测试用例),并进行断言。除0的…...

JavaWeb 实战 01 - 计算机是如何工作的

计算机是如何工作的1. 计算机发展史2. 计算机的基本组成2.1 冯诺依曼体系结构2.2 CPU的内部结构2.3 指令2.3.1 指令表2.3.1.1 寄存器2.3.2 CPU的工作流程2.4 小结3. 操作系统3.1 核心功能3.2 操作系统的软硬件结构3.3 什么是进程 / 任务3.4 进程管理3.4.1 管理3.4.2 PCB : 进程…...

线性代数学习-1

线性代数学习-1行图像和列图像行图像列图像总结本文转载于https://herosunly.blog.csdn.net/article/details/88698381 该文章本人认为十分有用,便自己敲一遍笔记加固印象原文链接 原文这个笔记感觉比我老师讲的更加透彻,清晰。很好的展示了线性代数的原…...

人工智能写的十段代码,九个通过测试了

“抢走你工作的不会是 AI ,而是先掌握 AI 能力的人” 编程测试 1. 我想用golang实现二叉树前序,请你帮我写一下代码。 // 定义二叉树节点 type TreeNode struct {Val intLeft *TreeNodeRight *TreeNode }// 前序遍历 func PreOrderTraversal(root *Tre…...

巴塞尔问题数值逼近方法

巴塞尔问题:计算所有平方数的导数和 ∑n1∞1n2lim⁡n→∞(112122⋯1n2)\sum_{n1}^{\infty} \frac{1}{n^{2}}\lim _{n \rightarrow\infty}\left(\frac{1}{1^{2}}\frac{1}{2^{2}}\cdots\frac{1}{n^{2}}\right)n1∑∞​n21​n→∞lim​(121​221​⋯n21​) 其理论解为…...

【深度学习环境】Docker

1. Docker 相关安装配置 1.1 docker 安装 参考:https://www.runoob.com/docker/ubuntu-docker-install.html 1.2 nvidia-docker 安装 参考:https://zhuanlan.zhihu.com/p/37519492 1.3 代理加速 参考:https://yeasy.gitbook.io/docker_…...

基于vscode开发vue项目的详细步骤教程 2 第三方图标库FontAwesome

1、Vue下载安装步骤的详细教程(亲测有效) 1_水w的博客-CSDN博客 2、Vue下载安装步骤的详细教程(亲测有效) 2 安装与创建默认项目_水w的博客-CSDN博客 3、基于vscode开发vue项目的详细步骤教程_水w的博客-CSDN博客 目录 六、第三方图标库FontAwesome 1 安装FontAwesome 解决报…...

今天面了个腾讯拿25K出来的软件测试工程师,让我见识到了真正的天花板...

今天上班开早会就是新人见面仪式,听说来了个很厉害的大佬,年纪还不大,是上家公司离职过来的,薪资已经达到中高等水平,很多人都好奇不已,能拿到这个薪资应该人不简单,果然,自我介绍的…...

OSG三维渲染引擎编程学习之六十九:“第六章:OSG场景工作机制” 之 “6.9 OSG数据变量”

目录 第六章 OSG场景工作机制 6.9 OSG数据变量 第六章 OSG场景工作机制 作为一个成熟的三维渲染引擎,需要提供快速获取场景数据、节点等信息,具备自定义数据或动画更新接口,能接收应用程序或窗口等各类消息。OSG三维渲染引擎能较好地完成上述工作,OSG是采用什么方式或工作…...

终极ncmdump指南:如何快速破解网易云音乐NCM加密格式限制

终极ncmdump指南:如何快速破解网易云音乐NCM加密格式限制 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾为网易云音乐下载的NCM格式文件无法在其他播放器中播放而烦恼?ncmdump作为一款开源解密工具&…...

RTLSeek:强化学习驱动的Verilog代码多样性生成技术

1. RTLSeek:当强化学习遇上硬件设计自动化在芯片设计领域,Verilog作为主流的硬件描述语言(HDL),其代码质量直接影响着芯片的性能、功耗和面积。传统RTL设计高度依赖工程师经验,一个资深工程师可能需要5-7年才能熟练掌握复杂芯片的…...

EDA平台化架构:电子系统设计的未来趋势

1. 电子系统设计演进:从工具链到平台化架构在电子设计自动化(EDA)领域,过去三十年最显著的变化莫过于设计工具架构的演进。早期工程师使用独立的原理图工具、PCB布局工具和仿真工具,通过文件导入导出的方式串联起整个设…...

输入流避坑全指南:从 Read() 编码溢出到 ReadLine() 缓冲区残留

1. 灵异事件:为什么我的循环跑了 52 次? 在编写基础逻辑题时,我曾遇到一个极其诡异的Bug:要求用户输入边长nnn打印正方形,我输入4,结果程序打印了 52行符号。 问题代码: int n Console.Read();…...

Windows HEIC缩略图终极指南:3分钟让iPhone照片在资源管理器完美预览

Windows HEIC缩略图终极指南:3分钟让iPhone照片在资源管理器完美预览 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC/HEIF files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails …...

ARM9EJ-S核心调试技术与系统速度访问机制解析

1. ARM9EJ-S核心调试技术概述 在嵌入式系统开发领域,调试技术的重要性不亚于代码编写本身。ARM9EJ-S作为经典的嵌入式处理器核心,其调试子系统设计体现了ARM架构对开发效率的深度考量。这套调试系统不仅仅是简单的"暂停-查看"工具,…...

Ember Simple Auth 高级技巧:自定义认证器与存储实现指南

Ember Simple Auth 高级技巧:自定义认证器与存储实现指南 【免费下载链接】ember-simple-auth A library for implementing authentication/authorization in Ember.js applications. 项目地址: https://gitcode.com/gh_mirrors/em/ember-simple-auth Ember …...

基于Godot引擎的模块化RTS游戏框架开发实战指南

1. 项目概述:当开放世界RTS遇上Godot引擎如果你和我一样,是个对即时战略游戏(RTS)有情怀,同时又对Godot引擎的轻量与高效念念不忘的开发者,那么看到“lampe-games/godot-open-rts”这个项目标题时&#xff…...

ViGEmBus完全指南:轻松解决Windows游戏手柄兼容性难题

ViGEmBus完全指南:轻松解决Windows游戏手柄兼容性难题 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 你是否曾经遇到过这样的困扰:在…...

系统设计:负载均衡器

原文:towardsdatascience.com/system-design-load-balancer-9a3582176f9b 简介 大型分布式应用每秒处理超过数千个请求。在某个时刻,处理单个机器上的请求变得不再可能。这就是为什么软件工程师关心水平扩展,即整个系统持续地组织在多个服务…...