当前位置: 首页 > news >正文

OceanBase:列存储

目录

1、列存储的定义

1、默认创建列存表

3、指定创建列存表

4、指定创建列存行存冗余表

5、行、列存储查询测试


1、列存储的定义

  • 行存储(Row-based Storage):行存储是以行为单位进行组织和存储数据。在这一模式下,数据库将一条记录的所有字段作为一个整体存储在一起,即每一行数据的所有信息连续存放。这种结构类似于我们在表格中看到的数据布局,每一行代表一个实体的完整信息。行式存储常见于传统的关系型数据库管理系统(RDBMS),如MySQL、Oracle、SQL Server等,它适合需要经常进行整行读写操作的场景,如事务处理系统(OLTP)。
  • 列存储(Column-based Storage): 列存储则是以列为单位进行组织和存储数据。在这种模式下,数据库将表中同一列的所有数据放在一起存储,不同列的数据分开存放。这意味着,每一列的数据在物理上是连续的,而属于同一行的不同列数据则可能分布在不同的位置。列式存储非常适合于数据分析和数据仓库应用,因为它允许对单个或部分列进行高效的查询和压缩,仅需读取查询所涉及的列,从而大幅减少I/O操作和提升分析查询的性能。列式存储的代表有Druid、Kudu、ClickHouse等系统,它们在大数据分析和在线分析处理(OLAP)场景中表现优异。

        注:图片来源于网络

        OceanBase 4.3 版本基于LSM-Tree 架构基础进行扩展,正式推出列存引擎,在一个架构、一个数据库上,实现了列存和行存数据存储一体化,兼顾 TP 和 AP 查询性能。

1、默认创建列存表

        1) 修改表默认存储类型

# 查看表默认存储类型

show parameters like 'default_table_store_format'\G;

# 修改表默认存储类型

alter system set default_table_store_format = "column";

        2)创建列存表

CREATE TABLE `dim_area` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `level` int NOT NULL,
  `parent_code` varchar(20)  NOT NULL,
  `area_code` varchar(20)  NOT NULL,
  `name` varchar(50)  NOT NULL,
  `short_name` varchar(50)  NOT NULL,
  `merger_name` varchar(50)  NOT NULL,
  `pinyin` varchar(30)  NOT NULL,
  `lng` decimal(10,6) NOT NULL,
  `lat` decimal(10,6) NOT NULL,
  `pcode` varchar(2)  DEFAULT NULL,
  `ccode` varchar(2)  DEFAULT NULL,
  `acode` varchar(2)  DEFAULT NULL,
  `tcode` varchar(3)  DEFAULT NULL,
  `vcode` varchar(3)  DEFAULT NULL,
  PRIMARY KEY (`id`)
);

3、指定创建列存表

        通过with column group 指定创建列存表:

CREATE TABLE `dim_area_c` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `level` int NOT NULL,
  `parent_code` varchar(20)  NOT NULL,
  `area_code` varchar(20)  NOT NULL,
  `name` varchar(50)  NOT NULL,
  `short_name` varchar(50)  NOT NULL,
  `merger_name` varchar(50)  NOT NULL,
  `pinyin` varchar(30)  NOT NULL,
  `lng` decimal(10,6) NOT NULL,
  `lat` decimal(10,6) NOT NULL,
  `pcode` varchar(2)  DEFAULT NULL,
  `ccode` varchar(2)  DEFAULT NULL,
  `acode` varchar(2)  DEFAULT NULL,
  `tcode` varchar(3)  DEFAULT NULL,
  `vcode` varchar(3)  DEFAULT NULL,
  PRIMARY KEY (`id`)
) with column group (each column);

4、指定创建列存行存冗余表

        在某些场景下,用户可以容忍一定程度的数据冗余,以满足 AP/TP 业务场景的双重需求。此时,可以增加行存数据的冗余,通过 `with column group` 语法增加指定 `all columns` 即可实现。

CREATE TABLE `dim_area_a` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `level` int NOT NULL,
  `parent_code` varchar(20)  NOT NULL,
  `area_code` varchar(20)  NOT NULL,
  `name` varchar(50)  NOT NULL,
  `short_name` varchar(50)  NOT NULL,
  `merger_name` varchar(50)  NOT NULL,
  `pinyin` varchar(30)  NOT NULL,
  `lng` decimal(10,6) NOT NULL,
  `lat` decimal(10,6) NOT NULL,
  `pcode` varchar(2)  DEFAULT NULL,
  `ccode` varchar(2)  DEFAULT NULL,
  `acode` varchar(2)  DEFAULT NULL,
  `tcode` varchar(3)  DEFAULT NULL,
  `vcode` varchar(3)  DEFAULT NULL,
  PRIMARY KEY (`id`)
) with column group (all columns, each column);

5、行、列存储查询测试

        测试环境采用单机部署,同一个数据库中建两个相同结构的表,一个是行存储,一个是列存储,两个表的数据也是一样的,所有资源配置都是一样的,测试查询结果如下:

1)统计总记录数

#行存储

select count(id) from dim_user;

#列存储

select count(id) from dim_user_c;

2)分组统计记录数

#行存储

select pcode,count(id) from dim_user  group by pcode;

#列存储

select pcode,count(id) from dim_user_c  group by pcode;

http://www.lryc.cn/news/355917.html

相关文章:

  • Rust:WIndows 环境下交叉编译 Linux 平台程序
  • 从零学爬虫:使用比如说说解析网页结构
  • C#数据类型变量、常量
  • Java高级面试问题及答案
  • 出现 Transaction rolled back because it has been marked as rollback-only 解决方法
  • 数据结构算法题day03
  • 深入分析C#中的“编写器”概念——代码修改、注解与重构
  • uview1.0 u-form表单回显校验不通过
  • 监控员工电脑的软件有哪些,不得不说这几款电脑监控软件太好用了
  • 【MySQL精通之路】索引优化(2)
  • VUE3 学习笔记(5):数组处理、计算属性与函数、class与Style绑定
  • 基于springboot实现大学生一体化服务平台系统项目【项目源码+论文说明】
  • 惠海 H6902B 升压恒流芯片 太阳能 风扇灯 应急灯 支持3.7V 5V 7.4V
  • 体验SmartEDA的高效与便捷,电子设计从未如此简单
  • LangChain笔记
  • 金融序列的布朗运动
  • 利用ChatGPT辅助数学建模竞赛:理清思路、解题技巧与实战经验
  • Java基础——Optional
  • Mask R-CNN实战
  • 02--SpringBoot自动装配原理
  • 【加密与解密(第四版)】第十二章笔记
  • 高并发幂等计数器【面试真题】
  • 设计软件有哪些?建模和造型工具篇(3),渲染100邀请码1a12
  • 无人机+EasyDSS互联网视频平台:构建秸秆焚烧监控的“天眼”系统
  • 【UE5.1 角色练习】06-角色发射火球-part2
  • 多系统集成的项目周期为何普遍较长?
  • 【LaTex】11 ACM参考文献顺序引用 - 解决 ACM-Reference-Format 顺序不符合论文实际引用顺序的问题
  • selenium 学习笔记(一)
  • Nginx-04-Docker Nginx
  • Rust一维Vec垂直方向拼接、水平方向拼接,多个二维Vec垂直方向拼接