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

news2024/9/24 19:23:01

图片

图片

    前  言

在这个信息量爆炸的时代,数据库面临着海量数据的挑战,如何提升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个省市自治区的数亿用户,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔通信核心交易,保障系统持续稳定运行超十年,并在通信、金融、交通、能源、物联网等行业成功商用落地。

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

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

相关文章

【倍智信息-倍智信息系统0day漏洞】

目录 一、漏洞说明 二、资产测绘 三、漏洞复现 四、批量验证 一、漏洞说明 倍智信息系统使用了组件Spring Actuator 作为 wei Spring acloud提供的一个功能模块,用于管理和监控 Spring 应用程序。如果未正确配置安全性,特别是在生产环境中&…

TinyWebserver的复现与改进(1):服务器环境的搭建与测试

计划开一个新坑, 主要是复现qinguoyi/TinyWebServer项目,并且使用其它模块提升性能。 本文开发服务器配置:腾讯云轻量级服务器,CPU - 2核 内存 - 2GB,操作系统 Ubuntu Server 18.04.1 LTS 64bit 打开端口 需要打开服务器3306、80…

字节跳动2025校园招聘内推

快来投递简历吧:https://job.toutiao.com/s/ir2RpsLR 快来投递简历吧:https://job.toutiao.com/s/ir2RpsLR

Vue3 组件通信

目录 create-vue创建项目 一. 父子通信 1. 父传子 2. 子传父 二. 模版引用(通过ref获取实例对象) 1.基本使用 2.defineExpose 三. 跨层通信 - provide和inject 1. 作用和场景 2. 跨层传递普通数据 3. 跨层传递响应式数据 4. 跨层传递方法 create-vue创建项目 npm ini…

使用Charles Proxy进行更好的移动的应用程序测试

许多移动的和Web应用程序测试人员普遍存在的一个错误是认为大多数测试只需要观察和与用户界面(UI)本身的交互。另一方面,当我们开始看到甚至操纵幕后发生的事情时,更具体地说,我们的应用程序正在向后端服务发送数据和从…

堆的实现(偷懒版)

🌹个人主页🌹:喜欢草莓熊的bear 🌹专栏🌹:数据结构 目录 前言 一、堆的实现 1.1 堆的向下调整算法 思路: 1.2 堆的向上调整算法 1.3 堆的创建 1.4 堆的复杂度计算 向下调整建堆的复杂度…

4款智能ai 写作工具助你探索智能写作的无限可能!

智能 AI 写作已经成为一个十分热门的工具。因为它可以从新闻报道到小说创作,从广告文案到学术论文,各个领域都可以给我们很有效的写作帮助。今天,我就给大家介绍4个在网上非常火的智能AI 写作工具。 1、笔灵写作助手 直通车 :https://ibilin…

基于Java中的SSM框架实现软件bug管理系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现软件bug管理系统演示 摘要 随着我们的智能生活到来,人们越来越意识到计算机生活在工作中的重要性,职场上大部分职业都是需要我们会熟练运用计算机知识的,所以我们要掌握计算机技能,这样才能在以后的职业生…

【学习笔记】Matlab和python双语言的学习(多目标规划)

文章目录 前言一、多目标规划1.特点2.一般形式3.多目标规划的解4.线性加权法 二、典型示例-----化工厂生产问题三、代码实现----Matlab四、代码实现----python总结 前言 通过模型算法,熟练对Matlab和python的应用。 学习视频链接: https://www.bilibili…

XJTUSE-离散数学-关系

集合的叉积 二元组(a,b) (a,b) (c,d) <> ac,bd m元组 叉积的结合律 关系 R 是 的子集&#xff0c;称为一个二元关系 前域&#xff0c;后域的概念 关系的表示方法 图表示法 矩阵表示法 关系的运算 逆运算: 逆运算的一些定理 复合关系 and 闭包运算 …

如何创建一个Gralde项目

如何创建一个Gralde项目 1. 使用IDEA创建一个Gradle项目&#xff1a; 1.1 打开Idea&#xff0c;新建项目&#xff1a; 选择File-> New -> Project 1.2 在项目类型列表中找到并选择Gradle 1.3 验证Gradle项目 可以通过运行 gradle.tasks 命令来验证项目是否正确创建&a…

【C++ Primer Plus】学习笔记 5

文章目录 前言一、指针和自由存储空间1. 声明和初始化指针2. 指针的危险3. 指针和数字4. 使用 new 来分配内存5. 使用 delete 释放内存6. 使用 new 来创建动态数组1.使用new创建动态数组2.使用动态数组 二、指针、数组和指针算术1. 指针小结1.声明指针2.给指针赋值3.对指针解除…

PCL 曲线4点细分算法

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 四点细分算法(Four-Point Subdivision Scheme)是一种用于生成平滑曲线的细分算法。与 Chaikin 逼近型细分算法不同,四点细分算法通过插入新的控制点来细化曲线,并生成一条逐步逼近的平滑曲线。该算法通常用于生…

Vue组件间传值总结

1.组件可以由内部的Data提供数据展示&#xff0c;也可以由父组件ajax取到数据后通过prop的方式传值进子组件。 样例: 子组件电影组件&#xff0c;展示标题和评分&#xff0c;声明属性props:["title","rating"] <template><div><h1>{{…

8.8作业

LVS 四层结构&#xff08;最多实现到iso第四层&#xff1a;传输层的功能 部署NAT模式集群案例 创建3台主机&#xff0c;分别为&#xff1a;lvs 、 webserver1 、 webserver2&#xff0c;其中lvs有两张网卡分别是net网卡为外网和仅主机内网 主机名网卡IP地址网关 lvsnet和主机…

哪些区块链有利可图?揭秘最赚钱公链背后的数据!

今天&#xff0c;我们将探索按收⼊排名前4位的L1和L2&#xff0c;并探讨这些区块链实际保留了多少收⼊。毕竟&#xff0c;收入能力是判断一条链是否能持续发展的重要之标之一。在此&#xff0c;我们将收益定义为&#xff1a;总收⼊减去代币发⾏量。 Layer 1 以太坊Ethereum 就…

LeeCode Practice Journal | Day37_DP05

完全背包 有N件物品和一个容量为W的背包&#xff0c;第 i 件物品的重量是weight[ i ]&#xff0c;价值为value[ i ]&#xff0c;每件物品都有无限个&#xff0c;求解使用背包物品价值总和达到最大的装包方案 二维 static int CompleteKnapsack2D(int[] weights, int[] value…

第三篇远程连接工具介绍及使用

目录 一、远程连接工具的介绍 1、作用 2、常用的远程连接工具 1) XShell 2) FinalShell 3) PuTTY 4) SecureCRT 5) MobaXterm 6) WinSCP 7) NxShell 3、Xshell 安装使用 1&#xff09;Xshell 安装 2&#xff09;Xshell 使用​编辑 4、Finalshell 安装使用 1&…

C++初学者指南-5.标准库(第二部分)--排序序列操作

C初学者指南-5.标准库(第二部分)–排序序列操作 文章目录 C初学者指南-5.标准库(第二部分)--排序序列操作二分查找binary_searchlower_boundupper_boundequal_rangeincludes 合并mergeinplace_merge 设置操作set_unionset_intersectionset_differenceset_symmetric_difference …

最“抠门”千亿儿媳,一件衣服穿五年!

文&#xff5c;琥珀食酒社 作者 | 积溪 我真是震惊了&#xff01; 刚刚刷奥运会 看解说员介绍称呼 说跳水名将郭晶晶和他的先生 我才知道霍家对郭晶晶的夸奖 绝非随口一说 她跟很多嫁入豪门的人 不一样 因为太“抠门”了 身为霍家儿媳妇 身价千亿的郭晶晶 一个头绳…