IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 列存Delta表是个什么东东 -> 正文阅读

[大数据]列存Delta表是个什么东东

本文分享自华为云社区《GaussDB(DWS) 列存delta表的简单介绍》,作者:上弦月。

?Delta表是什么

Delta表就是列存表附带的行存表,如果创建列存表时开启了delta表(开启/关闭方式见下文),那么在某些情况下,插入该列存表的数据,也会以行存的方式保存。


Delta表存在的意义

Delta表是依附于列存表的,所以先简单的介绍下列存的基本原理:
在GaussDB中,列存表按列存储数据,每列默认60000行存储在一个CU中,CU是列存表存储数据的最下单元,CU生成后数据固定不可更改。

无论是向列存表中插入1条还是60000条数据,都只会生成一个CU,在多次插入少量数据时,不能有效的利用列存压缩能力,导致数据膨胀影响查询的性能和磁盘使用率。

并且CU只能追加写。也就是说,后面对这个CU中的数据做更新或删除都不会真正更改这个CU,删除是将老数据在字典中标记为作废,更新操作是标记老数据删除后,再写入一条新记录到新CU,CU不会有任何的modify。

从这里我们可以看出,在对列存表进行多次更新/删除,或每次只插入很少量的数据后,会导致列存表空间膨胀,大量空间无法有效利用,这是因为列存表在设计上就是为了大批量数据导入以及海量数据按列存储/查询。

Delta表正是为了解决这两个问题。在启用delta表后,单条或者小批量数据导入时,数据将进入delta表中,避免小CU的产生,delta表的增删改查与行存表一致。开启delta表后,将显著提升列存表单条导入的性能。

如何开关delta表

Delta表默认是关闭的,若需要开启delta表,可以创建列存表时指定enable_delta为true

当然表创建完之后也可以随时开关delta表:
开启delta表:ALTER TABLE table_name SET (enable_delta=TRUE);
关闭delta表:ALTER TABLE table_name SET (enable_delta=FALSE);


开启delta表后的性能提升

前文说到,开启delta表能够防止小cu的产生,所以在小规模数据导入时,开启delta表能够带来显著的性能提升,在3CN,6DN的集群上测试,每次导入100条数据,导入时间能减少25%,存储空间减少97%,所以在需要多次插入小批量数据前应该先开启delta表,等到确定接下来没有小批量数据导入了再关闭。

开启delta表的负面影响

Delta表就是列存表附带的行存表,那么将数据插入delta表后将失去列存表的高压缩比等优势,正常情况下使用列存表的场景都是大批量数据导入,所以默认关闭delta表,如果开启delta表做大批量数据导入,反而会额外消耗更多时间和空间,同样在3C6D的集群上测试,每次导入10000条数据时,开启delta表会比不开启时慢4倍,额外消耗10倍以上的空间。所以开启delta表需谨慎,根据实际业务需要来选择开启和关闭。

将delta表的数据转移到主表存储

Delta表解决了小批量插入的问题,但是在多次小批量插入后,delta表也会变成一张大表,对此,需要用deltaMerge操作将数据从delta存储转移到列存储。

GaussDB提供两种合并操作:自动的auto-deltaMerge和手动的deltaMerge。auto-deltaMerge会将默认60000行以上的数据合并到列存储,而手动deltaMerge会将全部数据从Delta存储合并至列存储。但手动deltaMerge依赖高级别的锁,需谨慎使用。

手动deltaMerge的语法:vacuum deltamerge tablename;

总结

本文从delta表的概念、来历、用法、开启后的影响,delta表数据转移到主表几个方面做了详细的介绍。列存Delta表应用于行列混合存储,适合实时分析统计,解决了实时小批量数据入库引起的性能问题,定期合并到主表保证分析查询的性能。在实际使用时需要根据业务场景来评估是否需要开启delta表,否则不仅无法充分发挥GaussDB列存表的优势,反而会造成额外的空间和时间的浪费。

点击关注,第一时间了解华为云新鲜技术~?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:34:18  更:2022-03-08 22:36:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:39:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码