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

亚信安慧AntDB-T:使用Brin索引提升OLAP查询性能以及节省磁盘空间

图片

图片

    前  言

在这个信息量爆炸的时代,数据库面临着海量数据的挑战,如何提升OLAP业务的查询性能、如何节省磁盘空间等问题已经成为了数据库的痛点之所在。本篇着重介绍亚信安慧AntDB-T中Brin索引的实现过程以及应用在OLAP业务中带来的性能提升和存储降低。

亚信安慧AntDB-T作为一款HTAP数据库[1],有着不俗的OLAP[2]业务处理能力,本文主要介绍AntDB-T数据库的Brin索引在OLAP业务中的应用。Brin索引的大小是传统B-Tree索引的万分之一,且查询性能相比B-Tree索引提升了3倍,目前线上已有相关应用案例。

图片

(一)亚信安慧AntDB-T Brin索引简介

BRIN索引(块范围索引,Block Range Indexes),顾名思义就是对数据块区段所做的索引。

它的设计思路很简洁,即通过扫描整个表,记录下每个固定区段(例如第1到128号数据块)所包含被索引字段的最小值和最大值,并依次存入索引数据中。当要处理的查询包含索引字段时,可以使用Brin索引,再根据最小值和最大值过滤与查询条件不符合的区段,加速查找过程。

Brin索引具有以下两个优点:索引占用的空间很小;如果键值的顺序和数据块的组织顺序相同,则针对大表的统计型SQL性能会大幅提升

图片

(二)亚信安慧AntDB-T Brin索引实现

Brin索引由一组相同结构的索引块组成,每个索引块含有固定数目的索引记录,每条记录里面含有一个指向最值块的指针

Brin索引的存储结构如下图所示:

图片

图1:Brin索引的存储结构图

最值块里面的每条记录存放了数据区段的区段号,以及该区段中索引字段的最小值和最大值。

默认情况下,Brin索引每个区段包含的块数为128(可以在创建索引时,通过WITH (pages_per_range = xxx)子句来修改),而每个索引块的索引记录数固定(约为8K/6),这样可以很容易根据公式找到对应的索引记录,进而读取对应的最值记录。

图片

(三)AntDB-T Brin索引在OLAP中的最佳实践

下面来看下Brin索引和B-Tree索引在OLAP中的索引对比情况:

通过下述的对比可以看到,Brin索引的大小是传统B-Tree索引的万分之一,且查询性能相比B-Tree索引提升了3倍,查询性能的提升配合存储空间的降低,使Brin索引可以很好的应用于大数据量的OLAP业务,目前线上已有相关应用案例。

首先,创建一张订单表,包含自增ID,金额,创建时间这3个字段,并往里面插入数据。这里采用模拟的方式,时间范围2020年-2023年,每1秒插入一条订单记录。

图片

图2:模拟订单图

B-Tree索引

接下来,在时间列上创建一个B-Tree索引,并执行一个查询,该查询的目的为获取2022年11月中每天的总订单额。

图片

图3:创建B-Tree索引

可以从图中看到,创建索引耗时44s,索引大小2GB,执行的查询耗时2366ms。

Brin索引

删除B-Tree索引,再创建Brin索引,并执行相同的查询。

图片

图4:创建Brin索引

从图中可以看到,创建索引耗时20s,索引大小208 kB,执行的查询耗时656ms。

Brin索引的局限性

从上面的描述可以发现,Brin索引在很大程度上依赖于数据相邻性,如果数据非常混乱,那么Brin索引查询重叠的条目就非常多,这将导致查询要匹配更多的索引记录,进而导致从源表中读取多个范围块才能找到要查找的记录。

但对于OLAP这种历史表,迁移到历史数据库中可顺序加载且很少改动,这样就可以通过创建Brin索引来提高查询速度,并节省磁盘空间。

图片

总结

本文主要讲述了亚信安慧AntDB-T中的Brin索引的简介、Brin索引的实现、Brin索引在OLAP业务中的应用以及带来的优势和局限性。感兴趣的小伙伴请持续关注亚信安慧AntDB数据库公众号。

附:

[1]HTAP:全称为Hybrid transaction and analysis processing,即混合事务和分析处理。HTAP是混合型关系数据库,是能同时提供OLTP和OLAP的混合关系型数据库。

[2]OLAP:联机分析处理OLAP是一种软件技术,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。

关于亚信安慧AntDB数据库

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

相关文章:

亚信安慧AntDB-T:使用Brin索引提升OLAP查询性能以及节省磁盘空间

前 言 在这个信息量爆炸的时代,数据库面临着海量数据的挑战,如何提升OLAP业务的查询性能、如何节省磁盘空间等问题已经成为了数据库的痛点之所在。本篇着重介绍亚信安慧AntDB-T中Brin索引的实现过程以及应用在OLAP业务中带来的性能提升和存储降低。 亚…...

web渗透测试常用命令

Web Application TTPs HPING3 DoS hping3 targetiP --flood --frag --spoof ip --destport # --synHydra Online Brute Force hydra -1 ftp -P words -v targetiP ftpDownload HTTP File and Execute...

Kylin系列(二)使用

接上一章《Kylin系列(一)入门》 1. Kylin使用 1.1. 数据准备 1.1.1. 数据导入 在使用Apache Kylin时,数据导入是一个非常重要的环节,因为它直接影响到Kylin的性能、稳定性和易用性。以下是关于Apache Kylin数据导入的一些详细介绍: 导入数据的准备 在开始导入数据之前…...

CI/CD——CI持续集成实验

目录 一. 安装Docker 二. 部署Jenkins 三. 配置邮箱 四. Harbor部署 五. Nexus Repository部署 五. sonarqube安装 六. 配置Docker 七. jenkins系统配置sonarqube 八. 配置pipeline 九. 构建并集成 一. 安装Docker docker-ce镜像_docker-ce下载地址_docker-ce安装教程…...

2.4 大模型数据基础:预训练阶段数据详解 ——《带你自学大语言模型》系列

​本系列目录 《带你自学大语言模型》系列部分目录及计划,完整版目录见:带你自学大语言模型系列 —— 前言 第一部分 走进大语言模型(科普向) 第一章 走进大语言模型 1.1 从图灵机到GPT,人工智能经历了什么&#xf…...

Kali Linux——网络安全的瑞士军刀

一、引言 在网络安全的领域中,Kali Linux 宛如一把强大而全能的瑞士军刀,为安全研究人员和专业人士提供了丰富的工具和资源。本文将深入探讨 Kali Linux 的特点、优势、常用工具以及实际应用场景,带您领略这一强大操作系统的魅力。 二、Kal…...

UML建模-测试用例

用例可用于测试系统的正确性和有效性。 正确性表明系统的实现符合规格说明。有效性保证开发的系统是用户真正需要的系统。有效性检查一般在 系统开发之前进行。当用例模型构造完成后,开发者将模型交给用户讨论,由用户检查模型能否满足他们对系统的需求。…...

Python知识点:如何使用Socket模块进行网络编程

Python 的 socket 模块提供了一个底层网络接口,允许你通过编程进行网络通信。使用 socket 模块可以编写客户端和服务器端程序,从而实现数据在网络上的传输。以下是如何使用 socket 模块进行网络编程的详细说明。 1. 创建一个 Socket 首先,你…...

培训第二十一天(mysql用户创建与授权、角色创建)

上午 1、环境准备 [rootmysql ~]# rm -rf /etc/my.cnf //清空/etc目录下的my.cnf[rootmysql ~]# yum -y remove mariadb //移除mariadb[rootmysql ~]# find / -name "*mysql*" -exec rm -rf {} \; //删除mysql所有遗留文件 2、安装mysql绿包 [rootmysql ~]…...

makefile基本语法

在编写复杂的程序项目时,Makefile 是一个非常有用的工具,它能自动化构建过程。以下是一些基本的 Makefile 语法介绍: 基本结构: target: dependenciescommandtarget:构建目标,通常是一个文件,如…...

白骑士的PyCharm教学实战项目篇 4.4 大数据处理与分析

系列目录 上一篇:白骑士的PyCharm教学实战项目篇 4.3 自动化测试与持续集成​​​​​​​ 随着数据量的爆炸性增长,大数据处理与分析成为现代数据科学的重要课题。PyCharm提供了强大的功能,可以帮助开发者高效地进行大数据环境的配置与连接…...

无人机之民用无人机用途分类篇

一、航拍无人机 用于航拍摄影和电影制作,提供空中视角的拍摄服务。可用于电影制作、广告拍摄、房地产销售等。 二、物流无人机 用于快递和货物运输,提高物流效率,可以到达传统配送方式难以覆盖的地区,在突发事件如自然灾害、疫…...

Android10 修改设备名称

A10和A12的设备名称修改是不同的,A10设备名称修改分好几个位置 修改wifi默认名称 在framework/base模块下 diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 9041a7c3a14..7a1e63688c4 100644 --- a/core/res/res/values/…...

go testing 包

Go语言的testing包提供了一套丰富的测试工具,用于编写和运行测试用例。以下是testing包中一些常用的函数和类型: func TestMain(m *testing.M): 这是一个特殊的函数,用于执行测试的主函数。如果定义了TestMain,那么在运行go test时…...

基于phpstudy的靶场搭建和github加速

微软商店下载 watt toolkit,然后在侧边栏选择网络加速,勾选 github,就可以快速访问 github 1、下载搭建 sqlilabs github 找到 sqlilabs 靶场,点击 code,下载 zip解压之后,整体移动到 phpstudy_pro 文件夹…...

【数据结构】Map与Set

前言 前两篇文章我们研究了二叉搜索树与哈希表的结构与特点,他们二者是Map与Set这两个接口实现的底层结构,他们利用了搜索树与哈希表查找效率高这一特点,是一种专门用来进行搜索操作的容器或数据结构。本篇文章就让我们一起来梳理这两个接口的…...

Flamingo: a Visual Language Model for Few-Shot Learning

发表时间:NeurIPS 2022 论文链接:https://proceedings.neurips.cc/paper_files/paper/2022/file/960a172bc7fbf0177ccccbb411a7d800-Paper-Conference.pdf 作者单位:DeepMind Motivation:仅使用少量注释示例可以快速适应新任务…...

flume性能调优

作者&#xff1a;南墨 1.Source性能调优 1.1 Spooldir Source 使用Spooldir Source采集日志数据时&#xff0c;若每行日志数据<100bp&#xff0c;可以通过将多行合并传输来提升传输性能 建议合并时根据数据长度来确定多少行合并为一个单位进行传输&#xff0c;合并后的长…...

mysql 字符串转数组

在 MySQL 中&#xff0c;可以使用内置的字符串函数 SUBSTRING_INDEX() 和 REPLACE() 来实现将字符串转换为数组。 首先&#xff0c;使用 REPLACE() 函数将字符串中的分隔符替换为空格&#xff0c;然后使用 SUBSTRING_INDEX() 函数将字符串按空格分割成多个子字符串。最后&…...

UE基础 —— 术语

目录 Project Blueprint Class Object Actor Casting Component Pawn Character Player Controller AI Controller Player State Game Mode Game State Brush Volume Level World Project 项目&#xff08;Project&#xff09;包含游戏的所有内容&#xff0c…...

kubernets学习笔记——使用kubeadm构建kubernets集群及排错

使用kubeadm构建kubernets集群 一、准备工作1、repo源配置&#xff1a;阿里巴巴开源镜像源2、更新软件包并安装必要的系统工具3、同步时间4、禁用selinux5、禁用交换分区swap6、关闭防火墙 二、安装docker-ce、docker、cri-docker1、安装docker-ce2、开启内核转发&#xff0c;转…...

简述MYSQL聚簇索引、二级索引、索引下推

一丶聚簇索引 InnoDB的索引分为两种&#xff1a; 聚簇索引&#xff1a;一般创建表时的主键就会被mysql作为聚簇索引&#xff0c;如果没有主键则选择非空唯一索引作为聚簇索引&#xff0c;都没有则隐式创建一个索引作为聚簇索引&#xff1b;辅助索引&#xff1a;也就是非聚簇索…...

电脑开机后出现bootmgr is missing原因及解决方法

最近有网友问我为什么我电脑开机后出现bootmgr is missing&#xff0c;这个提示意思是:意思是启动管理器丢失&#xff0c;说明bootmgr损坏或者丢失&#xff0c;系统无法读取到这个必要的启动信息导致无法启动。原因有很多&#xff0c;比如我们采用的是uefi引导&#xff0c;而第…...

2024 年 7 月公链行业研报:市场波动中 Solana 表现抢眼,Layer 2 竞争白热化

作者&#xff1a;Stella L (stellafootprint.network) 数据来源&#xff1a;Footprint Analytics 公链 Research 页面 7 月份&#xff0c;加密货币市场表现活跃&#xff0c;波动幅度较大&#xff0c;这一现象映射了全球金融市场的整体趋势。现货以太坊 ETP 在美国的上市&…...

Python查缺補漏

一、 json.load(s)与json.dump(s)区别 json.loads()将str类型的数据转换为dict类型 json.dumps()将dict类型的数据转成str json.load()从json文件中读取数据 json.dump()将数据以json的数据类型写入文件中 二、json内部要使用双引号 data """{ "fruit&qu…...

c++的类和对象(中):默认成员函数与运算符重载(重难点!!)

前言 Hello, 小伙伴们&#xff0c;我们今天继续c的学习&#xff0c;我们上期有介绍到c的部分特性&#xff0c;以及一些区别于c语言的地方&#xff0c;今天我们将继续深入了解c的类和对象&#xff0c;探索c的奥秘。 好&#xff0c;废话不多说&#xff0c;开始我们今天的学习。…...

Android .kl按键布局文件

1.介绍 一个硬件按键的处理流程大致为&#xff1a;当用户按下或释放一个键时&#xff0c;键盘硬件会生成一个扫描码scan code&#xff0c;然后操作系统读取这个scan code&#xff0c;并将scan code扫描码映射到虚拟键码key code&#xff0c;最后操作系统根据映射的keycode生成…...

Java每日一练_模拟面试题6(JVM的GC过程)

一、JVM虚拟机组成 JVM五大内存区域&#xff1a;程序计数器&#xff0c;Java虚拟机栈&#xff0c;本地方法栈&#xff0c;java堆&#xff0c;方法区。 堆被划分为两个区域&#xff1a;年轻代(Young)、老年代(Tenured)。年轻代又被划分为三个区域&#xff1a;Eden、From Surviv…...

数据防泄密软件推荐|(6大数据防泄密软件推荐!)

很多朋友在后台私信&#xff0c;什么是数据防泄密软件&#xff0c;有哪些数据防泄密软件推荐。 今天小编将从定义出发&#xff0c;深入浅出地介绍这一技术的工作原理、应用场景以及实现方式。 一、什么是文档透明加密&#xff1f; 文档透明加密是一种在用户无感知的情况下对文…...

Codeforces 874 div3 A-G

A. Musical Puzzle 分析 每两个相邻的字母都要录制一段&#xff0c;开个set记录一下&#xff0c;然后输出set的大小 C代码&#xff1a; #include<iostream> #include<set> using namespace std; void solve(){int n;string s;cin>>n>>s;set<strin…...