OceanBase:列存储

news2024/11/20 21:24:54

目录

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.coloradmin.cn/o/1707196.html

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

相关文章

第十八节:带你梳理Vue2: Vue组件中的注意事项和特例

1. Vue组件名推荐使用驼峰命名 现在我们来看看为什么在Vue中推荐注册组件时使用驼峰写法, 在了解这个之前,相信大家应该都能明白为什么在Vue中, 局部组件的使用频率高于全局组件. 推荐使用驼峰写法也是和局部组件有关系 我们先看一个示例 <div id"app"><…

JAVA云HIS医院系统源码 云HIS运维平台源码 融合B/S版电子病历系统,支持电子病历四级,saas模式

JAVA云HIS医院系统源码 云HIS运维平台源码 融合B/S版电子病历系统&#xff0c;支持电子病历四级&#xff0c;saas模式 HIS系统就是医院信息管理系统&#xff0c;HIS系统是整个医院信息化的核心&#xff0c;门诊、住院、药房、药库等都是由HIS系统来承载起来的&#xff0c;所以…

MATLAB | 儿童节一起来玩转MATLAB叭

hey, 儿童节要到啦&#xff0c;提前祝各位大朋友&#xff0c;小朋友儿童节快乐&#xff0c;本篇将会在前半部分给出一些有趣且简短的代码&#xff0c;在后半部分展示一下我准备的游戏大礼包里面的游戏效果&#xff0c;完整代码获取方式请见文末&#xff0c;让我们一起玩转MATLA…

【SpringBoot】单元测试实战演示及心得分享

目录 1.指定测试标准 2.设计测试用例 3.测试集示例 4.跑测试集 1.指定测试标准 单元测试会用到mock和junit的内容&#xff0c;作者前文有详解&#xff0c;可移步&#xff1a; Spring Boot单元测试-CSDN博客 mockito的详细使用-CSDN博客 1.1.测哪一层&#xff1f; 以当…

conda 环境找不到 libnsl.so.1

安装prokka后运行报错 perl: error while loading shared libraries: libnsl.so.1: cannot open shared object file: No such file or directory 通过conda list 可以看到 有libsnl 2.00版本&#xff0c;通过修改软链接方式进行欺骗

K8s集群中的Pod调度约束亲和性与反亲和性

前言 在 K8s 集群管理中&#xff0c;Pod 的调度约束——亲和性&#xff08;Affinity&#xff09;与反亲和性&#xff08;Anti-Affinity&#xff09;这两种机制允许管理员精细控制 Pod 在集群内的分布方式&#xff0c;以适应多样化的业务需求和运维策略。本篇将介绍 K8s 集群中…

【软考】设计模式之外观模式

目录 1. 说明2. 应用场景3. 结构图4. 构成5. 适用性6. 优点7. 缺点8. java示例 1. 说明 1.为子系统中的一组接口提供一个一致的界面&#xff0c;Facade模式定义了一个高层接口&#xff0c;这个接口使得这一子系统更加容易使用。2.Facade Pattern。3.是一种结构型设计模式&…

OM电商系统asp.net

OM电商系统&#xff0c;可以让顾客全面了解商品的详细信息&#xff0c;消除网上购物的信息不对称问题。通过商品分类来组织众多的商品&#xff0c;方便顾客找到所需要的商品。提供客服顾客互动机制&#xff0c;提高顾客的参与度。通过设计合理的订单处理流程&#xff0c;提高顾…

JavaSE:String类常用方法(巨详细)

1、引言 在学习C语言时&#xff0c;我们就已经了解了字符串&#xff0c;但是在C语言中字符串只能用字符数组或者指针来表示&#xff0c;没有特定的字符串类型&#xff0c;而在Java中&#xff0c;我们有了字符串这一特定的类型---String类。 2、String类的常用方法 2.1 字符串…

第15章-超声波避障功能 HC-SR04超声波测距模块详解STM32超声波测距

这个是全网最详细的STM32项目教学视频。 第一篇在这里: 视频在这里 STM32智能小车V3-STM32入门教程-openmv与STM32循迹小车-stm32f103c8t6-电赛 嵌入式学习 PID控制算法 编码器电机 跟随 15.1-超声波测距 完成超声波测距功能、测量数据显示在OLED屏幕上 硬件介绍 使用&#…

OpenHarmony实战开发——宿舍全屋智能开发指南

项目说明 基于OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;、数字管家开发宿舍全屋智能&#xff0c;实现碰一碰开门、碰一碰开灯、碰一碰开风扇以及烟感检测。因为各项目开发流程大体相似&#xff0c;本文主要以碰一碰开门为例介绍如何在现有OpenHar…

野外作战武器操作3D模拟实操仿真训练以便老兵能适应不同的训练需求

强国必须强军&#xff0c;我国在军事方面的投入持续加大&#xff0c;自然在军事武器培训方面不容忽视&#xff0c;在军事领域&#xff0c;3D模拟展示不仅提升了军事训练的效率&#xff0c;还为我们提供了更加直观、真实的武器体验。 首先&#xff0c;3D军事武器模拟展示能够提供…

Django革新者:突破传统,构建下一代Web应用

书接上文 —— 家园建筑师&#xff1a;用Django打造你的Web帝国&#xff0c;从前面的学习中&#xff0c;咱们我们经历了一个完整的Django Web开发之旅&#xff0c;涵盖了从基础概念到高级特性的各个方面&#xff1a; 引言&#xff1a;介绍了企业级Web框架的需求&#xff0c;并概…

分享个自用的 Nginx 加强 WordPress 防护的规则

Nginx WordPress 的组合是目前非常普及的组合了&#xff0c;我们完全可以借助 Nginx 规则来加强 WordPress 的防护&#xff0c;提高 WordPress 的安全性&#xff0c;今天明月就给大家分享个自用的 Nginx 针对 WordPress 的防护规则&#xff0c;部分规则大家只需要根据自己的需要…

ABB焊接功能介绍

1.基本配置 1.2配置Robot Ware Arc 2.焊接语句 2.1直线焊接语句 过渡点指令必须位于起弧指令与熄弧指令之间&#xff0c;不能单独使用。 2.2直线焊接示例 2.3圆弧焊接语句 2.4圆弧焊接示例 2.5摆动参数 关于ABB焊接机器人摆动参数设定 一般情况下&#xff0c;主要设置以…

[Linux]磁盘管理

一.Linux磁盘管理的原理 磁盘分区与Linux的目录是借助"挂载机制"链接的&#xff0c;将一个分区与一个目录连接起来。访问目录&#xff0c;相当于访问某块分区 lsblk命令: lsblk命令可以查看磁盘分区&#xff0c;以及每个分区所挂载的目录 lsblk -f 可以查看更细节的…

利用NewGIS平台将FME模板发布为接口

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 一、模板编写 二、发布模板 三、接口获取 四、移动端调用 ​​​​​ 前言 在实际的应用生产过程中&#xff0c;尤其是移动端GIS软件的开发&#xff0c;针对一些闭…

win11中文文件名称乱码解决方案

解压后出现以下的乱码 解决方案 步骤1.winR 输入intl.cpl 或 windows 自带的搜索搜“intl.cpl”&#xff0c;打开这个面板控制项 步骤2.在新打开的区域面板中&#xff0c;选择“管理”标签页&#xff0c;点击下方的“更改系统区域设置”按钮 步骤3.取消"Beta版…"选…

Nginx的配置与调试

目录 1、安装Nginx 2、Nginx的配置文件结构 2.1 Nginx的全局配置 2.2 HTTP服务器配置 2.3 HttpGzip模块配置 2.4 负载均衡配置 2.5 server虚拟主机配置 2.6 location URL匹配配置 2.7 StubStatus模块配置 1、安装Nginx 在安装Nginx之前&#xff0c;需确保系统已经安装…

Day38 代码随想录打卡|二叉树篇---二叉树的最大深度

题目&#xff08;leecode T104&#xff09;&#xff1a; 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 递归法&#xff1a; 递归法首先将根节点作为参数传入&#xff0c;随后每一轮传入当前节点的…