浅谈亚信安慧AntDB-M条件下推

news2024/9/25 11:17:42

概述

“下推”是数据库管理系统优化查询性能的一种思路,集中式数据库支持谓词下推投影下推,通过将Filter(过滤)和Project(映射)算子在算子数中向下移动,提前对行/列进行裁剪,减少后续计算处理的数据量。

分布式数据库中,条件涉及字段可能比较多,或者索引字段上使用了函数,导致无法直接使用索引,这时介入端会向远程服务发送全表扫描查询,将数据全表拉回本地执行,这种执行方式是非常低效的,大量数据的网络传输占用带宽,又带来了大量数据的本地拷贝、格式转换等代价。

数据库AntDB-M,将继续沿用集中式数据库的执行思路,将条件下推到远端服务,在远端过滤(Filter)和映射(Project)数据,减少网络I/O和本地格式转换的代价,解决跨节点访问数据的开销。

条件下推

分布式数据库与集中式不同,分布式数据库的数据在不同的数据节点,需要避免过多复杂的算子下推,导致查询性能下降。比如:Hash Join、FileSort、涉及临时表、Agg Merge等。为此,我们简单对其进行分类:

图表1 条件分类

图片

实现方式

分布式数据库条件下推时,在接入端序列化条件树,数据节点(服务端)反序列化条件树,在服务端行记录返回前,执行条件树判断当前行是否满足条件。

图表2 下推示意图

图片

(1)条件树序列化

条件树的序列化过程,就是将内存中的树型条件链表,转化为可识别的标记型xml语言,然后打包写入到上行包。

图表3 序列话

图片

(2)条件树反序列化

服务端节点接收到数据包,将Block Buffer转化为标记型xml语言,并重构树型条件链表。为减少重复发送,客户端只在首次访问时发送条件树。

图表 4 反序列化

图片

(3)驱动算子

多张表关联查询时,执行Nest Loop算法,SQL优化为由小表驱动大表的嵌套循环操作。这里涉及到驱动表和被驱动表,被驱动表执行时,需要检测驱动表记录是否发生切换。

图片

执行tb2查询时,驱动表tb1字段(id)在条件树中称之为“驱动算子”。根据tb1行唯一标识(Row_id)的值,判断记录是否切换。

若驱动算子的值发生变化,需要将驱动算子的值重新推到远端节点。远端节点,接收到新的驱动算子,需要将其回写到驱动表行记录中,这个回写的过程称之为“回表”。保证所有节点的上下文一致。

测试验证

本例使用包含1千万条数据的sysbench表来模拟不同选择率条件下,条件下推带来的性能收益,远程和本地机器配置均为4 Core 32G,single表的定义为:

图片

查询条件中使用包含主键的函数与常量进行比较,最优执行计划使用的是全表扫描方式。差别在于是否将条件下推到远程执行,通过改变常量值,构造不同的选择率条件,测试性能得到:

图片

从测试数据可以看出,当条件选择率较低(小于0.1)时,约有近两倍的提升。

图片

通过监控看出测试期间对网络带宽的占用情况,测试过程中,条件下推与不下推查询交替进行,可以看到:

  • 条件不下推时,对网络带宽占用很高,且在不同选择率条件下都相同;

  • 条件下推且选择率较低(小于0.1)时,对网络的流量非常小,随着选择率的增大逐渐增多,与条件不下推的网络I/O相比有明显区别。

新增的列裁剪、行数据压缩打包、Agg函数下推、批量行记录阈值,配合条件下推功能,进一步减少网络访问次数、网络传输数据量。

总结

分布式数据库支持谓词下推和投影(列裁剪)下推,优化产生的副作用极小。关联Join通过驱动表回表等操作,实现下推功能。为进一步降低网络开销,定义规则表,将Agg算子整体下推,并在接入端Merge。批量查询/更新、服务端自动提交、延迟发送等优化技术,能够合理的计算下推大幅降低网络开销,提升查询性能。

关于亚信安慧AntDB数据库

AntDB数据库始于2008年,在运营商的核心系统上,服务国内24个省市自治区的数亿用户,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔通信核心交易,保障系统持续稳定运行超十年,并在通信、金融、交通、能源、物联网等行业成功商用落地。

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

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

相关文章

从嵌套事务的日志看MyBatis的sqlSession生命周期

service层业务代码 Override public void test(){QueryWrapper<StoreRebateCalculateLog> queryWrapper;queryWrapper new QueryWrapper<>();queryWrapper.eq("delete_flag", 0);//执行查询A,以非事务方式执行List<StoreRebateCalculateLog> sto…

代码学习第24天----回溯算法

随想录日记part24 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.10 主要内容&#xff1a;回溯算法在代码学习中尤其重要&#xff0c;所以今天继续加深对其的理解&#xff1a;1&#xff1a;递增子序列 &#xff1b;2.全排列 &#xff1b;3.全排列II 491.递…

Android:adb命令

执行adb命令的窗口如下 Mac或Linux系统里的终端窗口&#xff1b; window系统运行输入cmd打开的指令窗口&#xff1b; Android Studio 里控制下面的Terminal窗口 1. 查看已链接的设备和模拟器 adb devices -l 2. 查看Android内核版本号 adb shell getprop ro.build.version.re…

近期TRO案件盘点,外观专利又双叒叕成维权高发地

近期&#xff0c;多个权利人进行外观专利维权&#xff0c;众多国内卖家被告&#xff0c;建议卖家自查。 案例一&#xff1a;尿布收纳袋——商标外观专利版权 案例关于这款尿布收纳袋&#xff0c;涉及商标、外观专利和版权。 &#xff08;图源网络&#xff0c;侵删&#xff09…

HarmonyOS NEXT应用开发之跨文件样式复用和组件复用

介绍 本示例主要介绍了跨文件样式复用和组件复用的场景。在应用开发中&#xff0c;我们通常需要使用相同功能和样式的ArkUI组件&#xff0c;例如购物页面中会使用相同样式的Button按钮、Text显示文字&#xff0c;我们常用的方法是抽取公共样式或者封装成一个自定义组件到公共组…

汽车KL15、KL30、ACC的区别

文章目录 前言一、KL30是什么&#xff1f;二、KL15是什么&#xff1f;KL15信号的演变 三、为啥用KL15、KL30呢&#xff1f; 前言 相信刚接触汽车电子的伙伴都会有一个疑惑&#xff0c;什么是KL15?什么是KL30? 内心一脸懵逼…… KL是德语Klemme的缩写&#xff0c;指的是ECU的…

软件测评中心分享:软件鉴定测试与验收测试有什么联系和区别?

1、软件鉴定测试   软件鉴定测试是在软件开发完成后进行的一个核心环节&#xff0c;是通过对软件进行功能性、性能、安全性等方面的综合测试&#xff0c;来验证软件是否符合规定的需求和标准。 2、软件验收测试   软件验收测试是软件开发工作结束后的最后一个环节&#xf…

深入理解 CSS:基础概念、注释、选择器及优先级

在构建网页的过程中&#xff0c;我们不仅需要HTML来搭建骨架&#xff0c;还需要CSS来装扮我们的网页。那么&#xff0c;什么是CSS呢&#xff1f;本文将带大家了解css的基础概念&#xff0c;注释、选择器及优先级。 一、CSS简介 1.1 什么是CSS CSS&#xff0c;全称为Cascadin…

IoT 物联网场景中 LoRa + 蓝牙Bluetooth 室内场馆高精定位技术全面解析

基于LoRa蓝牙的室内场景定位技术&#xff0c;蓝牙主要负责位置服务&#xff0c;LoRa主要负责数据传输。 01 LoRa和蓝牙技术 LoRa全称 “Long Rang”&#xff0c;是一种成熟的基于扩频技术的低功耗、超长距离的LPWAN无线通信技术。LoRa主要采用的是窄带扩频技术&#xff0c;抗干…

VS2019 C++ NetCDF配置

原链接1 原链接2 做个备份 1.下载对应的NetCDF-C和C库 官网下载 选择64位的NetCDF4安装版&#xff08;没有DAP的&#xff09; 现在官网已经没有NetCDF-C 4.7.3 版本了&#xff0c;网上别人提供了新的下载地址&#xff1a;NetCDF各个版本&#xff08;Index of /library/net…

力扣题单(小白友好)

力扣题单 算法小白自用题单,目前对于一些简单的数据结构感觉掌握的还可以,但是力扣很多题还是需要看题解,不够熟练;故整理了一份题单,用于巩固练习; 网上确实有很多对于算法分类讲解的网站,but:有一丢丢选择困难症,每天不知道该刷什么题,再加上网站对于一类题一般就有十几道题目…

Emotion Prompt-LLM能够理解并能通过情感刺激得以增强

Large Language Models Understand and Can be Enhanced by Emotional Stimuli 情感智能对我们的日常行为和互动产生了显著的影响。尽管大型语言模型&#xff08;LLMs&#xff09;被视为向人工通用智能迈进的一大步&#xff0c;在许多任务中表现出色&#xff0c;但目前尚不清楚…

政务服务中心怎么用AI交互数字人打造政务服务新名片?

西海岸新区政务服务中心推出AI交互数字人“灵灵”&#xff0c;以一体机终端形式提供便捷、智能的服务体验&#xff0c;并担任政务数字人主播宣传政策信息。 *图片源于网络 并且AI交互数字人灵灵还承担了政务数字人主播的工作&#xff0c;以数字人短视频的形式&#xff0c;向市…

xercesc库中文保存XML功能实现

目录 一 参考链接 二 运行结果 三 代码 一 参考链接 DOM Programming Guide (apache.org) Xerces-c DOM XML文件的构造_xerces-c domimplementation-CSDN博客 Xerces-c库的使用-CSDN博客 二 运行结果 三 代码 #include "XercesC_Test.h"#if 1//参考链接&…

SpringBoot3使用响应Result类返回的响应状态码为406

Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation] 解决方法&#xff1a;Result类上加上Data注解

软考系统分析师2024上半年报名流程及注意事项

2024年5月软考系统分析师报名入口&#xff1a; 中国计算机技术职业资格网&#xff08;http://www.ruankao.org.cn/&#xff09; 2024年软考报名时间暂未公布&#xff0c;考试时间上半年为5月25日到28日&#xff0c;下半年考试时间为11月9日到12日。不想错过考试最新消息的考友…

GraalVM详细安装及打包springboot、java、javafx使用教程(打包javafx项目篇)

前言 在当前多元化开发环境下&#xff0c;Java作为一种广泛应用的编程语言&#xff0c;其应用部署效率与灵活性的重要性日益凸显。Spring Boot框架以其简洁的配置和强大的功能深受开发者喜爱&#xff0c;而JavaFX则为开发者提供了构建丰富桌面客户端应用的能力。然而&#xff…

力扣每日一题 2024/3/21 频率跟踪器

题目描述 用例说明 思路讲解 看到统计数字频率或者出现次数很容易想到用哈希表&#xff0c;但是一个哈希表count将数字和数字出现次数映射起来似乎不太够&#xff0c;如果需要统计数字出现次数的频率的话还是需要进行一次遍历&#xff0c;时间复杂度为O(n)&#xff0c;有没有常…

【Linux】进程控制 -- 详解

一、进程创建 目前学习到的进程创建的两种方式&#xff1a; 命令行启动命令&#xff08;程序、指令等&#xff09; 。通过程序自身&#xff0c;调用 fork 函数创建出子进程。 1、fork 函数初识 在 Linux 中的系统接口 fork 函数是非常重要的函数&#xff0c;它从已存在进程中…

【小白入门篇2】总有一款AI工具适合你

上一篇《【小白入门篇1】GPT到底是怎样练成&#xff1f;》介绍了GPT的形成&#xff0c;直到今日&#xff0c;GPT工具层出不穷&#xff0c;搞得很多初学者眼花缭乱&#xff0c;今天梳理一下国内外比较出名的GPT工具&#xff0c;适用各个领域非专业的同学选择。GPT工具目前基本以…