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

页级压缩

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.mfbz.cn/a/720867.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FL Studio没有声音怎么办 FL Studio声音卡顿怎么办

FL Studio是一款综合创作歌曲的宿主软件,这款软件的里面内置了很多效果器和插件,非常适合创作电子音乐,很多创作电子音乐的小伙伴都喜欢使用此款软件。不过有些刚接触FL Studio的小伙伴,在使用此软件的时候,会出现一些…

openh264 帧间预测编码原理:WelsMdP16x16函数

openh264 帧间预测编码 帧间预测编码是视频压缩技术中的关键方法之一,它主要用于减少视频序列中时间维度上的冗余。这种编码方式依赖于视频帧之间的空间相关性,通过预测和补偿来减少数据量,从而实现高效的视频压缩。帧间预测编码广泛应用于各…

短路是怎么形成的

1. 短路分为电源短路和用电器短路。 电源短路:电流不经过任何用电器,直接由正极经过导线流向负极,由于电源内阻很小,导致短路电流很大,特别容易烧坏电源。 用电器短路:也叫部分电路短路,即一根…

全国产城市轨道交通运营公安AI高清视频监控系统

方案简介 城市轨道交通运营公安高清视频监控系统解决方案针对运营部门和公安部门的安保需求,选用华维视讯的各类前端和视频编解码、控制产品,通过统一平台提供视频监控服务和智能应用,满足轨道交通运营业主客运组织和抢险指挥的需求&#xff…

【idea】解决springboot项目中遇到的问题

一、Maven报错Could not find artifact com.mysql:mysql-connector-j:pom:unknown in aliyunmaven解决及分析 报错 创建springboot项目,勾选数据库驱动,springboot版本为3,现在改成了2.7.2,Maven就发生了报错Could not find art…

从兼职到大神:新手必看的UE材质原理讲解

对于刚接触UE的同学来说,材质篇章往往是令人望而生畏的一大板块。但材质的一些基本原理其实并不难,只要稍作理解便可以轻松入门。接下来我们便分为材质类型和节点类型两个知识板块来介绍材质的相关内容。 材质类型 材质分类 金属:金属材质一…

【C语言】数组参数和指针参数详解

在写代码的时候难免要把【数组】或者【指针】传给函数&#xff0c;那函数的参数该如何设计呢&#xff1f; 1 一维数组传参 #include <stdio.h> void test(int arr[])//ok? {} void test(int arr[10])//ok? {} void test(int* arr)//ok? {} void test2(int* arr[20])…

单载波水声通信技术研究【附MATLAB代码】

文章来源&#xff1a;​微信公众号&#xff1a;EW Frontier 摘要 水下无线通信因其在海洋科研、国防、救援及资源开发等方面的关键作用而备受关注。声波作为水中信息传输的有效载体&#xff0c;推动了水声通信技术的发展&#xff0c;其中单载波调制技术由于其高频谱利用率、结…

Vue60-TodoList案例-全局事件总线

一、全局事件总线的适用场景 虽然全局事件总线使用于任意组件之间的通信&#xff0c;但是没有必要处处用它。 数据在哪里&#xff0c;操作数据的方法就在哪里&#xff01; 二、TodoList案例-全局事件总线 适用于全局总线的场景&#xff1a;Item和App&#xff08;爷孙关系&…

RFID期末复习 | 防碰撞算法 | 信源编码 | 差错控制 | 系统调制 | S50卡 | 无源标签 | 工作频率 | 自动识别

防碰撞算法 ALOHA算法 ALOHA算法是一种随机接入方法&#xff0c;其基本思想是采取标签先发言的方式&#xff0c;当标签进入读写器的识别区域内时就自动向读写器发送其自身的ID号&#xff0c;在标签发送数据的过程中&#xff0c;若有其他标签也在发送数据&#xff0c;将会发生…

深度神经网络——什么是降维?

引言 什么是降维&#xff1f; 降维是用于降低数据集维度的过程&#xff0c;采用许多特征并将它们表示为更少的特征。 例如&#xff0c;降维可用于将二十个特征的数据集减少到仅有几个特征。 降维通常用于无监督学习任务 降维是一个用于降低数据集维度的过程&#xff0c;采用许…

从0到1,揭秘AI产品经理的高薪秘诀,转型之路与实战资源全解析

前言 随着算法模型的日益精进、计算能力的显著提升以及海量数据的积累&#xff0c;人工智能领域正以前所未有的速度蓬勃发展。 在国家政策的积极推动、社会资本的强劲注入下&#xff0c;人工智能产业正处于技术快速进步的黄金时期&#xff0c;其影响力广泛渗透至教育智能化、…

dmhs同步因目的端表自增列报错解决方法

dmhs同步因目的端表自增列报错解决方法 1 dmhs copy 装载数据时报错 HY000 CODE:-27232 配置源端捕获器cpt 1 dmhs copy 装载数据时报错 HY000 CODE:-2723 ERR:Only if specified in the column list and SET IDENTITY INSERT is ON, then identity column could be assigned …

栈帧浅析,堆栈漏洞概述——【太原理工大学软件安全期末补充】

在上一篇文章中我说实验一不重要&#xff0c;确实没必要完全按照实验内容逐字逐句理解&#xff0c;但是这里我们补充一个知识点 栈帧&#xff08;Stack Frame&#xff09;是计算机程序执行过程中&#xff0c;调用栈&#xff08;Call Stack&#xff09;中的一个单元&#xff0c;…

存储文件夹下所有.cpp和.h的代码到对应的txt文件里

最近大半年刷了160多天的题&#xff0c;每次刷的时候都要新建一个VS文件&#xff0c;所以文件内存太大了&#xff0c;又舍不得删&#xff0c;就用ai整了一个脚本&#xff0c;可将当前路径下的所有文件里的.cpp和.h文件储存到相应名字的txt文件里&#xff0c;若文件夹下还有文件…

跟TED演讲学英文:A tale of mental illness -- from the inside by Elyn Saks

A tale of mental illness – from the inside Link: https://www.ted.com/talks/elyn_saks_a_tale_of_mental_illness_from_the_inside Speaker: Elyn Saks Date: June 2012 文章目录 A tale of mental illness -- from the insideIntroductionVocabularySummaryTranscriptA…

从零开始理解 XML 和 JSON 的区别

在这篇文章中&#xff0c;我们将深入探讨XML和JSON这两种数据格式的关键异同点&#xff0c;以便读者可以根据项目需求做出明智的技术选择。 了解XML XML&#xff08;Extensible Markup Language&#xff09;是一种用于数据定义的标记语言&#xff0c;最初由万维网联盟&#x…

uniapp使用伪元素实现气泡

uniapp使用伪元素实现气泡 背景实现思路代码实现尾巴 背景 气泡效果在开发中使用是非常常见的&#xff0c;使用场景有提示框&#xff0c;对话框等等&#xff0c;今天我们使用css来实现气泡效果。老规矩&#xff0c;先看下效果图&#xff1a; 实现思路 其实实现这个气泡框的…

Matplotlib(小案例)

1、3D表面形状的绘制 from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import numpy as np import matplotlib as mplfigplt.figure() axfig.add_subplot(111,projection3d)unp.linspace(0,2*np.pi,100) vnp.linspace(0,np.pi,100) x10*np.outer(n…

Kubernetes CSR 颁发的 MinIO Operator 证书

在当前的 Kubernetes 环境中&#xff0c;创建、管理和自动化 TLS 证书的标准方法是使用 kind: CertificateSigningRequest &#xff08;CSR&#xff09;资源。此原生 Kubernetes 资源提供了一种强大而高效的方式来处理集群中证书的整个生命周期。 通过利用 CSR 资源&#xff0…