对比分析数仓中行列存的特性
摘要:行存表示了一种数据的存储方式,是最传统的一种存储方式。
本文分享自华为云社区《【玩转PB级数仓GaussDB(DWS)】行列存对比的一些事》,作者:sevenjiang。
行存表示了一种数据的存储方式,是最传统的一种存储方式。对于GaussDB(DWS)来说可以认为其表示存储引擎的基础实现,在其之上逐步构筑了列存和hdfs之类的存储特性。如下简单介绍下行列存使用的一些对比。
集群设置介绍:
参数default_orientation控制建表不指定存储方式的默认行为。
通过如下建表显式设置可以指定行列存储:
ORIENTATION
指定表数据的存储方式,即行存方式、列存方式,该参数设置成功后就不再支持修改。
取值范围:
• ROW,表示表的数据将以行式存储。
行存储适合于OLTP业务,此类型的表上交互事务比较多,一次交互会涉及表中的多个列,用行存查询效率较高。
• COLUMN,表示表的数据将以列式存储。
列存储适合于数据仓库业务,此类型的表上会做大量的汇聚计算,且涉及的列操作较少
适用场景:
列储存优势:
- 列的数据特征比较相似,适合压缩,压缩比很高;
- 表列的个数比较多,但是访问的列个数比较少, 列存可以大大减少不必要的IO读, 提高性能;
- 基于列批量数据的运算,CPU的cache命中率比较高,性能比较好;
- 列存储引擎更适合OLAP大数据统计分析的场景。
列储存劣势:
- 列存表(delta表但默认并没有启用)不适合小量 insert 及update操作
行存储优势:
- 点查询(返回记录少,基于索引的简单查询);
- 增、删、改操作较多的场景;
- 主要使用整张表的内容,而不是单独某几个列,并且所关注的内容不需要通过任何聚集运算,推荐使用行式存储。
对比现状:
- 类型支持范围不同;
- 不支持表达式索引,索引失效;
- 行存默认btree索引,列存默认psort,主健是813版本支持的,老版本不支持;
- 老版本列存复制表不支持更新,813版本支持 ;
- 表级的check约束列存不支持 ;
- cu锁的问题,并发更新会报错 ;
- 没有并发更新,但是开启delta表,更新/delete概率出错;
- 小CU的问题突出,引发空间膨胀,性能问题等 ;
- exchange要求表的with中option一致;
列存导入实现方式:
- 列存表推荐使用批量插入(INSERT INTO SELECT/COPY),单行记录插入会造成空间浪费,访问效率下降;
- 导入数据按列缓存,默认每60000行(通过max_batchrow修改)或者1G的大小生成CU;
- 生成CU时,根据数据类型,默认low压缩级别(通过compression修改),进行压缩。
- 先写入CUDesc,再写入CU,同时将CU插入到数据复制队列。最后写入VCU;
- CU文件是追加写(APPEND ONLY)。
- 分区表注意:
- 每一个分区是一个独立的列存表;
- vector batch的进入,单条数据进入bulkload_row;
- 下盘、读取的处理;
- 内存自适应。
存在行列存join情况:
行存列存JOIN 转换的执行计划不符合预期,可以通过 set enable_force_vector_engine = on; 进行下优化:
enable_force_vector_engine
参数说明:对于支持向量化的执行器算子,如果其子节点是非向量化的算子,通过设置此参数为on,强制生成向量化的执行计划。
当打开enable_force_vector_engine开关时,无论是行存表、列存表或者是行列混存,如果plantree中不包含不支持向量化的场景,则强制走向量化执行引擎。
参数类型:USERSET
取值范围:布尔型
默认值:off
手工基础行转列操作,如果表有业务执行,需要进行加锁或者事务中执行,视图和索引进行单独处理:
create table schema.row_table1 (like schema.table1 including all EXCLUDING RELOPTIONS EXCLUDING INDEXES) WITH (ORIENTATION=column; insert into schema.row_table1 select * from schema.table1; ALTER TABLE schema.row_table1 ADD CONSTRAINT row_table1_pk PRIMARY KEY (xxx_id); alter table rename schema.table1 to col_table1; alter table rename schema.row_table1 to table1;

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
5个高并发导致数仓资源类报错分析
摘要:集群运行过程中,有时候会执行并发量比较高的业务场景,一些数据库没有为这种高并发作业配置合适的参数,会导致作业大量报错,这篇文章让你玩转并发作业。 本文分享自华为云社区《【玩转PB级数仓GaussDB(DWS)】在线运维 - 高并发导致资源类报错分析解决》,作者:323老四。 集群运行过程中,有时候会执行并发量比较高的业务场景,一些数据库没有为这种高并发作业配置合适的参数,会导致作业大量报错,这篇文章让你玩转并发作业。 【报错信息一】 客户端返回以下类似报错 FATAL: Already too many clients, active/non-active/reserved: 800/19/3. --这种报错是因为客户端连接数超过了CN最大连接数 【解决办法】 gs_guc set -Z coordinator -Z datanode -N all -I all -c "max_connections=2000" 然后重启集群 其中max_connections不能调节过大按照实际需要调节,过大会预占过多内存。 【报错信息二】 客户端或者日志有以下报错 has no availa...
- 下一篇
运维百家讲坛第2期:作业帮聂安 - 运维如何转型,听听作业帮的OPaS思路
运维百家讲坛,通过采访和约稿的方式,请运维领域老炮输出深刻洞见,共同碰撞,以期形成一些先进的共识,推动行业更好得前进。 第1期央请井老板发表了很多有趣的观点,有人留言说是运维劝退指南,哈哈,这一期的嘉宾,观点会有不同,请大家抱着开放的心态,听百家之言,自己做职业、人生规划。所谓兼听则明,偏信则暗,如果只听自己顺耳的,大概率不会有深度思考碰撞,憾事也。 这里是接地气、有高度的《运维百家讲坛》第 2 期,开讲! 嘉宾介绍 本期我们邀请的是作业帮的运维负责人聂安,聂安是资深行业老炮,先后履职于阿里、小米、滴滴、作业帮,有10多年的运维/研发/管理经验。 要点简述 传统运维,职责是将工业制成品组装成服务、交付给用户,并维持服务运转;特点是强依附于业务 领域危机,云原生时代公有云大量使用、微服务架构和DevOps真实达成、工具体系持续繁荣,传统运维的职责不断被外包、转移、替代,出现了领域危机 组织结构,协作方式从人人协同、逐渐升级为平台自助,运维的主旋律从横向协同、转变为服务产品和技术中台 运维转型,技术上通过自助化的平台、对外提供运维服务能力OPaS(OP as Service),分成对象、场...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS关闭SELinux安全模块
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16