数据压缩还能这么玩,国产数据库有救了!

news2024/11/25 20:41:53

页级压缩

alt

opengauss数据库是以数据页面(Page)为单位进行压缩解压,本特性自openGauss 3.0.0版本开始引入,通过对数据页的透明页压缩和维护页面存储位置的方式,做到高压缩、高性能。提高数据库对磁盘的利用率。

页级压缩方案

数据页面在写入到磁盘前进行压缩,内存中数据为未压缩的状态。数据页面压缩后,拆分为多个定长(1K/2K/4K)的Chunk存储,压缩算法支持lz4和zstd。

行级压缩

alt

本特性自MogDB 3.1.0版本开始引入。 在数据写入aStore行存表时,后台对数据进行压缩,典型场景下可以获得50%的存储空间节省,同时通过后台流控技术减少对系统资源的占用,性能几乎无损。

行级压缩方案

MogDB以数据行(Tuple)为单位进行压缩解压,以页面为单位训练字典。数据页面在写入内存页面时,准实时完成压缩,内存中为压缩状态,自研轻量级压缩算法。以记录行为单位进行压缩解压,对于OLTP点查场景,只需要解压一行数据,没有解压放大,能够获得更好的查询性能;

内存中的页面为压缩状态,在相同Shared Buffer大小下可以提供更高的内存命中率,进而提升查询性能;

在MVCC(多版本并发控制)查找历史版本链时,无需解压中间版本,只需要解压目标版本的数据行。这样可以大大减少解压的工作量,提高查询性能;

采用多数据页共享字典的方案,相比单表训练字典的方案,压缩字典可以随数据的变更自动演进,没有字典逐渐失效的问题。

优点

  • OLTP点查场景,只需要解压一行数据,没有解压放大;
  • 延迟解压,MVCC查找历史版本链时无需解压,只需要解压目标版本;
  • 内存中页面为压缩状态,相同Shared Buffer容量下,内存命中率更高;
  • 页内压缩,无page颗粒压缩的对齐空洞和磁盘碎片问题;
  • 多个页面一起训练并共享压缩字典,减少字典空间占用;
  • 专用字典解码器缓存,解压时无需频繁构建解码器,提升解码性能。

行级压缩支持的功能

Astore行级压缩支持如下功能:

  • 创建和修改压缩表;
  • 在对压缩表进行读写操作时自动完成压缩或解压操作;
  • 支持压缩表主备同步;
  • 支持压缩表过期版本回收;
  • 当数据导入到压缩表时支持自动完成压缩;
  • 支持通过GS_COMPRESSION视图展示系统所有压缩表的压缩情况;
  • 兼容一级分区表,包括移动、迁移、合并、更新,分裂,添加,删除,截断分区等所有功能;兼容二级分区表,二级子分区的相关操作包括新增、删除、分裂、截断分区;
  • 支持在段页式模式下创建压缩表,且段页式压缩表增删改查等特性能正常执行;
  • 压缩表兼容MogDB已经发布的工具;
  • 在autovacuum线程中加入compress page流程,减少磁盘IO次数,加锁次数,从而降低后台压缩开销;同时,Astore行级压缩优化了相关压缩算法;表的压缩效果对用户透明。

行级压缩约束

  • 仅对Astore行存表生效,不能用于Ustore行存表、列存表和MOT;
  • 默认创建非压缩表;
  • 不能为系统表指定压缩属性;
  • 不能为外表指定压缩属性;
  • 不支持tablespace压缩属性;
  • 分区压缩表,单个分区数据量大于128MB才会执行压缩;
  • 普通vacuum命令,不会执行压缩,vacuum full命令会执行压缩;
  • 后台压缩节省出来的空间不会立即反应到磁盘的空间占用,后续的数据插入会重复使用压缩节省出来的空间;
  • 不支持3.0版本的段页式压缩表升级到5.0版本。如果3.0版本中有段页式压缩表,升级前请将段页式压缩表中的数据导入非压缩表进行备份,然后将段页式压缩表删除,升级完成后重新创建段页式压缩表,并将备份的数据导入新创建的段页式压缩表;

实战

1、创建压缩表和非压缩表。

MogDB=# CREATE TABLE tb_mogdb_compress (id INT, name TEXT, addr TEXT, info TEXT) WITH (compression = yes);
CREATE TABLE
MogDB=# CREATE TABLE tb_mogdb_no_compress (id INT, name TEXT, addr TEXT, info TEXT);
CREATE TABLE

2、插入随机数据。

MogDB=# INSERT INTO tb_mogdb_compress VALUES (generate_series(0, 1999999), 'fasdfasdhigasidfdfhgioashdfgohaosdgh', 'fasdfasdfasdahasdhsfsdgstyjdth', 'fasdhgsoidfhisdifgiosdfiogio');
INSERT 0 2000000
MogDB=# INSERT INTO tb_mogdb_no_compress VALUES (generate_series(0, 1999999), 'fasdfasdhigasidfdfhgioashdfgohaosdgh', 'fasdfasdfasdahasdhsfsdgstyjdth', 'fasdhgsoidfhisdifgiosdfiogio');
INSERT 0 2000000

3、执行vacuum full可以立即触发压缩指令。

MogDB=# vacuum full tb_mogdb_compress;

4、查看压缩表和非压缩表所占大小。

MogDB=# \d+
                                             List of relations
 Schema |         Name         | Type  | Owner  |  Size  |              Storage              | Description 
--------+----------------------+-------+--------+--------+-----------------------------------+-------------
 public | tb_mogdb_compress    | table | yaojun | 105 MB | {orientation=row,compression=yes} | 
 public | tb_mogdb_no_compress | table | yaojun | 256 MB | {orientation=row,compression=no}  | 
(2 rows)

可以看出节约了50%以上的存储空间节省,MogDB的行级压缩更省CPU,性能更好,适用于金融高负载场景。

本文由 mdnice 多平台发布

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

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

相关文章

文心一言 VS 讯飞星火 VS chatgpt (284)-- 算法导论21.2 2题

二、对定理 21.1 的整体证明进行改造,得到使用链表表示和加权合并启发式策略下的 MAKE-SET 和 FIND-SET 的摊还时间上界为 O(1),以及 UNION 的摊还时间上界为 O(lgn)。如果要写代码,请用go语言。 文心一言: 在Go语言中实现使用链…

Golang——channel

channel是Go在语言层面提供的协程间的通信方式。通过channel我们可以实现多个协程之间的通信,并对协程进行并发控制。 使用注意: 管道没有缓冲区时,从管道中读取数据会阻塞,直到有协程向管道中写入数据。类似地,向管道…

Java快速开发:力推开源项目若依RuoYi

在Java开发开源框架中,首屈一指的应该若依,在行业里,不管小公司中公司还是大公司,都能够看到若依项目的身影。足以见得 若依框架的受众之大。 RuoYi-Cloud RuoYi-Cloud 是一个 Java EE 分布式微服务架构平台,基于经典…

轻兔推荐 —— who.cx

via:轻兔推荐 - https://app.lighttools.net/ 简介 who.cx是一个域名whois查询工具,界面简洁,可查询域名基本信息,注册续费价格,支持查看一级域名解析记录 - 对于已注册域名可以查看注册商注册时间、 过期时间等基础信…

大多数JAVA程序员都干不到35岁吗?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」, 点个关注在评论区回复“666”之后私信回复“666”,全部无偿共享给大家!!! 很遗憾是的,对…

idea2020版本下载及注册

一。准备idea2020和BetterIntelliJ插件和补丁key 二、开始安装。 idea就正常安装,然后打开,选择试用30天打开即可,然后File - settings - plugins 点击 Install Plugin from Disk 然后选择BetterIntelliJ这个,这个后期不可变名称…

漏洞挖掘 | 记一次某src拿下高危漏洞

一、获取web端管理员权限 0x01简单查看一下,发现存在登录以及证书查询操作指南等功能 因该站特征较为明显,所以对页面进行了强打码 0x02弱口令测试(无成果) 既然存在登录口,那么肯定要试试弱口令了,开干…

124M中国十大城市群规划范围数据

城市群是由若干个都市圈构成的广域城镇化形态,其内部应该包含若干个中心城市。 都市圈是指围绕某一个中心城市,即超大或特大城市的城镇化形态。 无论在体量还是在层级上,都市圈要低于城市群的概念。 现在,我们就来为你分享一下…

国内能用的ai聊天软件有哪些?这三款还不错

国内能用的ai聊天软件有哪些?在人工智能飞速发展的今天,AI聊天软件已经成为我们日常生活和工作中不可或缺的一部分。它们不仅可以帮助我们快速获取信息,还能提供有趣的对话体验。今天,就为大家推荐三款国内能用的AI聊天软件&#…

Consul 如何删除不需要的服务

一、找到需要删除的id 二、打开postman 使用put请求 http://ip:port/v1/agent/service/deregister/mc-admin-192-168-0-182-8084三、区域如果要验证输入验证

粒子群算法PSO优化BP神经网络预测MATLAB代码实现(PSO-BP预测)

本文以MATLAB自带的脂肪数据集为例,数据集为EXCEL格式,接下来介绍粒子群算法优化BP神经网络预测的MATLAB代码步骤,主要流程包括1. 读取数据 2.划分训练集和测试集 3.归一化 4.确定BP神经网络的隐含层最优节点数量 5. 使用粒子群算法优化BP的神…

vue3实现div盒子的内容hover上去时样式改变及部分元素的显隐

样式&#xff1a; hover后的样式&#xff1a; 整体盒子的背景颜色发生了改变&#xff0c;盒子内边距发生了改变&#xff0c;右下侧的箭头出现 实现方式&#xff1a; 利用mouseover和mouseout并结合css样式实现 template中&#xff1a; <divclass"new-item"v-f…

uniapp滚动加载

uniapp实现滚动加载&#xff0c;先获取10条数据&#xff0c;滚动到底时&#xff0c;再获取10条数据&#xff0c;以此类推&#xff0c;直至没有数据为止。 使用scroll-view&#xff0c;注意一定要给一个固定高度&#xff0c;隐藏滚动条会更美观 2. 在data中定义 3. 获取数据 …

【回溯算法题记录】39. 组合总和

题目&#x1f517; 题目描述 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数…

2. kafka消息队列

kafka消息队列 一、kafka消息队列二、消息服务的术语三、kafka消息确认机制 ACK四、kafka安装部署1、环境规划2、使用事先部署好的zookeeper管理kafka的高可用3、安装jdk4、安装kafka5、配置kafka6、启动kafka7、测试生产者、消费者模型7.1 创建主题7.2 测试生产者产生数据7.3 …

Contact-Rich Robot ManipulationTask:grinding and Peg-in-Hole Assembly

Contact-Rich Robot Manipulation Task涵盖了多种需要机器人与环境或物体进行密切接触的复杂操作。 1. Grinding&#xff08;研磨&#xff09; 任务描述&#xff1a;研磨是制造业中常见的加工过程&#xff0c;涉及使用研磨工具去除材料表面的一层或多层&#xff0c;以达到预定…

轻松掌握使用PuTTY SSH连接cPanel的技巧

作为一名多年的Hostease用户&#xff0c;我深知管理服务器的重要性。在我的工作中&#xff0c;SSH连接是必不可少的工具之一&#xff0c;而PuTTY则是我常用的SSH客户端。今天&#xff0c;我想分享一下如何使用PuTTY SSH连接到cPanel&#xff0c;帮助你更好地管理你的服务器。 第…

不止程序员!未来职场的王炸组合也许就是“计算机+X”!

每年毕业季&#xff0c;都会有不少同学感叹计算机行业“太卷了”&#xff0c;连实习都竞争激烈&#xff0c;不禁让人担忧&#xff1a;学计算机未来还吃香吗&#xff1f; 选择专业时&#xff0c;毕业后好不好找工作&#xff0c;的确是需要慎重考虑的关键因素。 放眼当前就业市…

同三维T80006EH2-4K30 双路4K30 HDMI编码器

同三维T80006EH2-4K30 双路4K30 HDMI编码器 2路HDMI输入&#xff0c;各带1路HDMI环出&#xff0c;支持4K30 产品简介&#xff1a; T80006EH2-4K30 4K编码器&#xff08;采集盒&#xff09;是一款双路4K HDMI音视频编码产品&#xff0c;支持2路4K30 HDMI信号输入&#xff0c;各…

python修改pip install 默认安装路径

第一步:通过win菜单,找到Prompt,点击进入 第二步:在cmd里输入 python -m site获得: D:\ProgramData\Anaconda3 ----》是Anaconda安装的位置USER_BASE: C:\Users\kevin… ----》表示默认路径在C盘USER_SITE: C:\Users\kevin… ----》表示默认路径在C盘1.2 修改pip 默认安…