国产数据库-内核特性-gbase8a智能索引

国产数据库-内核特性-gbase8a智能索引

南大通用gbase8a MPP Cluster是一款分析型MPP数据库,有个特性鲜明的功能就是智能索引。该索引建立膨胀率不超过百分之一,包含基于列的统计信息,可以有效过滤数据,大幅降低数据库磁盘IO,尤其是在聚合操作上也能达到很高的性能。

1、infobright

Infobright是一款开源列式存储数据库,采用知识网格查询优化方式,对即席查询有很大提升。可惜已经没人维护了。而Gbase8a的列存就是基于infobright。吸收了infobright列存带来的优势,我们看下infobright典型结构:

f86890b6e10883b0e225f2fe619668a5.png

Infobright通过知识网格进行数据筛选,从而降低数据IO。知识网格由Knowlege Node、Data Pack Node和Data Pack组成。

1)Data Pack(DP):将数据按照64K行的大小切分成一个一个的Rough Rows,而Rough Rows根据列分为一个个Data Pack。他是底层的数据存储单元,也是基本的压缩/解压缩单元。每个列第i个DP包中行数是一样的。

2)Data Pack Node(DPN):一个DPN与一个DP对应,存储了:最大值、最小值、平均值和sum值,以及null值数量和记录总数量;压缩方式;占用的字节数等

3)Knowlege Node(KN):相比DPN由了更高层的一些智能化信息,包括直方图、字符位图和pack-to-pack。

4)直方图:包含数值类型的列细腻些。根据每个DP中实际数据分布,将数值范围分成1024段,若某段中有数据则标记1,否则标记0。查询时,可以快速判断该列数据是否满足条件。

5)字符位图:字符类型列的映射表。映射表中每个格子占用一位,表示字符在字符串的该位置是否存中,查询时可以快速判断列数据是否满足条件。

6)Pack-to-pack:是一个特殊的元数据,存储两个表在列上的join关系。也是一个二维矩阵,每个格子1位,表示表1某列的第i个DP与表2中某列的第j个DP至少有一个值相等满足等值join条件。

Infobright对数据进行进一步划分,根据查询条件,通过知识网格对DP进行分类:

1)无关DP:DP中没有符合查询条件的数据

2)强相关DP:DP中所有数据都符合查询条件

3)待定DP:可能部分数据符合条件。

针对普通查询,只有相关DP和待定DP才需要进行解压。

2、gbase8a技术白皮书讲解

8c3597135acaf6a4476da9ab6bcc9fac.png

假设表mytab有A、B、C、D、E五列,每列都有几个数据包。

测试语句:select a,sum(b) as b from mytab where a<=’100101’ group by a order by b desc;

1)根据查询条件,智能索引先过滤A的数据包,即哪些数据包符合a<=’100101’这个条件。上图,淡蓝和红色表示强相关和待定。

2)对于淡蓝的数据,只需要访问B数据包的智能索引信息,就能得到sum信息,不需要对此数据包进行解压。这里的sum值是655360。(白皮书这样说不对吧,如果没有group by a倒是可以理解;加上group by a,怎么理解?强相关DP中,a列相同值不止一个吧,不能直接使用B数据包的索引信息,它的索引信息是没分组的。不了解gbase8a中对带group by的聚合到底是怎么实现的,有了解的可以一起讨论下)

3)对于红色的数据,将其对应的A、B包解压,进行查询聚合计算

4)将2)和3)的结果求和,返回。

不管怎么说,刨除带group by外,从上述原理上可以看出,过滤操作可以通过每个DP包的统计信息快速筛选出满足条件的DP包,强相关的DP包仅从它的统计信息中就可以得到聚合值,无需再解压DP包并进行扫描计算,无关DP包就可以直接跳过。大大降低了计算过程及IO。

3、参考

https://www.researchgate.net/publication/221213121_Data_warehouse_technology_by_infobright

https://www.researchgate.net/publication/252041317_Research_of_infobright_based_on_MySQL's_open_source_engine

https://www.docin.com/p-70898761.html

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

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

相关文章

NRF52832-扩展广播

nordic论坛 我想要设置广播名称为 “一二三四五”&#xff0c;当广播名称为FULL_NAME时&#xff0c;但是广播显示还是“一&#xff1f;”&#xff0c;“&#xff1f;”是乱码&#xff0c;后来打开nrf connect观察广播&#xff0c;在没连接的时候&#xff0c;点击一下&#xff0…

CDP spark 无法读取hive表的问题

最近发现CDP中某些个别hive表&#xff0c; impala和hive可以正常读取&#xff0c;但spark 却读成空表&#xff0c;已排除spark参数和orc 的问题。 StackOverflow上有个相似问题 说是需要关闭以下参数&#xff1a; hive.create.as.insert.onlyfalse metastore.create.as.acid…

Qt中字符串比较的时候如何忽略大小写?

问题描述: 当我要比较电脑的MAC地址的时候,出现了使用ifconfig查看到的地址,和Qt使用QNetInterface获取的MAC地址有着大小写的区别。 解决办法: 方法一: 可以使用QString类的compare()函数,并将第三个参数设置为Qt::CaseInsensitive。下面是一个示例代码: #include &…

React 基础篇(一)

&#x1f4bb; React 基础篇&#xff08;一&#xff09;&#x1f3e0;专栏&#xff1a;React &#x1f440;个人主页&#xff1a;繁星学编程&#x1f341; &#x1f9d1;个人简介&#xff1a;一个不断提高自我的平凡人&#x1f680; &#x1f50a;分享方向&#xff1a;目前主攻…

基于Matlab微分器的PID控制(附上完整源码+数据)

PID控制是一种常用的控制算法&#xff0c;广泛应用于工业控制和自动化系统中。在Matlab中&#xff0c;可以使用PID控制器对象来实现PID控制。 文章目录 说明部分代码完整源码数据下载 说明 PID控制器是一个反馈控制系统&#xff0c;它根据当前的偏差&#xff08;即实际值与期望…

数据结构和算法——快速排序(算法概述、选主元、子集划分、小规模数据的处理、算法实现)

目录 算法概述 图示 伪代码 选主元 子集划分 小规模数据的处理 算法实现 算法概述 图示 快速排序和归并排序有一些相似&#xff0c;都是用到了分而治之的思想&#xff1a; 伪代码 通过初步的认识&#xff0c;我们能够知道快速排序算法最好的情况应该是&#xff1a; 每…

torchaudio 教程

torchaudio 教程 PyTorch 是一个开源深度学习平台&#xff0c;提供了从研究原型到具有 GPU 支持的生产部署的无缝路径。 解决机器学习问题的巨大努力在于数据准备。 torchaudio充分利用了 PyTorch 的 GPU 支持&#xff0c;并提供了许多工具来简化数据加载并使其更具可读性。 …

TCP协议如何实现可靠传输

TCP最主要的特点 TCP是面向连接的运输层协议&#xff0c;在无连接的、不可靠的IP网络服务基础之上提供可靠交付的服务。为此&#xff0c;在IP的数据报服务基础之上&#xff0c;增加了保证可靠性的一系列措施。 TCP最主要的特点&#xff1a; TCP是面向连接的输出层协议 每一条…

降龙十八掌

目录 大数据&#xff1a; 1 HIVE&#xff1a; 1.1 HIVE QL 1.1.1 创建表 1.1.2 更新表 1.1.3 常用语句 1.2 hive参数配置 大数据&#xff1a; 1 HIVE&#xff1a; 1.1 HIVE QL DDL中常用的命令有&#xff1a;create&#xff0c;drop&#xff0c;alter&#xff0c;trunc…

Python web实战 | 使用 Django 搭建 Web 应用程序 【干货】

概要 从社交媒体到在线购物&#xff0c;从在线银行到在线医疗&#xff0c;Web 应用程序为人们提供了方便快捷的服务。Web 应用程序已经成为了人们日常生活中不可或缺的一部分。搭建一个高效、稳定、易用的 Web 应用程序并不是一件容易的事情。本文将介绍如何使用 Django 快速搭…

OpenShift 4 - 可观测性之用 OpenTelemetry+Jaeger 实现 Distributed Tracing

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在支持 OpenShift 4.13 的环境中验证 文章目录 技术架构部署 Distributed Tracing 运行环境安装测试应用并进行观测跟踪参考 说明&#xff1a; 本文使用的测试应用采用的是 “手动 Instrumentation” 方式在…

WPF快速开发(2):图标库知识点

文章目录 前言知识点windows资源Style:样式Setter:属性继承关系 Trigger:触发器 WPF层级划分数据绑定声明数据上下文绑定数据模板 前言 图标资源下载 iconfont 知识点 windows资源 Window.Resources&#xff1a;资源位置声明X:Key&#xff1a;资源Id&#xff0c;用于前端的…

Kafka 实时处理Stream与Batch的对比分析

Kafka 实时处理Stream与Batch的对比分析 一、简介1. Kafka的定义和特点2. Kafka实时处理基础架构 二、Stream和Batch1. Stream和Batch的区别2. 对比Stream和Batch的优缺点Stream的优缺点Batch的优缺点 三、使用场景1. 使用场景对比Batch使用场景Stream使用场景 2. 如何选择Stre…

PHP服务器文件日志功能

php文件日志功能 <?php w_log(123,test/); w_log(array(a>1),test/); function w_log($data, $path log/) {$root_pathstr_replace(\\, /, dirname(dirname(__FILE__)));//改成你自己目录$dir $root_path . /log/ . $path;if (!is_dir($dir)) {mkdir($dir, 0777, tr…

2023年JAVA最新面试题

2023年JAVA最新面试题 1 JavaWeb基础1.1 HashMap的底层实现原理&#xff1f;1.2 HashMap 和 HashTable的异同&#xff1f;1.5 Collection 和 Collections的区别&#xff1f;1.6 Collection接口的两种区别1.7 ArrayList、LinkedList、Vector者的异同&#xff1f;1.8 String、Str…

【云原生】Minikube 部署

minikube 介绍 minikube 是本地 Kubernetes&#xff0c;专注于让 Kubernetes 易于学习和开发。 您所需要的只是 Docker&#xff08;或类似兼容的&#xff09;容器或虚拟机环境&#xff0c;只需一条命令即可使用 Kubernetes&#xff1a;minikube start 环境准备 2 个或更多 …

前端JS 展示上传图片缩略图(本地图片读取)

需求&#xff1a; 点击上传图片按钮&#xff0c;选择图片以后&#xff0c;不请求后端接口&#xff0c;直接将图片展示在缩略图中。 解决方案&#xff1a; 使用 FileReader 和 FileReader 中的 readAsDataURL 方法。 第一步 从input[type“file”] (上传文件标签) 里面拿到fil…

数据库管理-第九十四期 19c OCM之路-第四堂(02)(20230725)

第九十四期 19c OCM之路-第四堂&#xff08;02&#xff09;&#xff08;20230725&#xff09; 第四堂继续&#xff01; 考点3&#xff1a;SQL statement tuning SQL语句调优 收集Schema统计信息 exec dbms_stats.gather_schems_stats(HR);开启制定表索引监控 create index…

AutoSAR系列讲解(实践篇)9.2-信息发送的Filter机制

再强调一遍哈,这几节的内容大家看不懂没关系。都属于不常用的知识,仅作了解,假如用到了可以再挖出来看看。还有一点,很多的英文不太好翻译,比如这里的Filter,翻译成滤波,筛选我感觉都不太贴切,干脆就直接叫Filter了,之后应该会出现类似的英文,博主尽量想办法让大家理…

C语言每日一题:6.移除元素+合并两个有序数组。

第一题&#xff1a;移除元素 思路一&#xff1a; 一&#xff1a;暴力查找的方法&#xff1a; 1.找到对应val值的下标&#xff0c;返回数组的下标。 2.删除对应的下标&#xff0c;从前向后用后面覆盖前面。当后一个是数组最后一个数值是就赋值结束了&#xff08;注意数组越界的问…