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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/654242.html

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

相关文章

C++ Primer 第五版 第十三章 拷贝控制

当定义一个类时,我们显式地或隐式地指定在此类型的对象拷贝、移动、赋值和销毁时做什么。一个类通过定义五种特殊的成员函数来控制这些操作,包括:拷贝构造函数(copy constructor)、拷贝赋值运算符(copy-ass…

web自动化的断言和日志封装

断言 UI自动化常见的断言条件包括: 通过当前页面的URL地址通过当前页面的标题通过当前页面的提示文本信息通过当前页面的某些元素变化/显示 一句话总结:通过肉眼观察页面的变化检查。 【用代码模仿人的识别页面】 一般断言写一条就够了,如…

Visual Studio 智能代码插件:CodeGeeX

前言 在软件开发领域,高效的编程助手一直是提升开发者效率和质量的关键。 随着人工智能技术的不断发展,智能编程助手逐渐成为开发者们不可或缺的工具。其中,CodeGeeX作为一款专为Visual Studio设计的免费智能编程助手,凭借其强大…

goimghdr,一个有趣的 Python 库!

更多Python学习内容:ipengtao.com 大家好,今天为大家分享一个有趣的 Python 库 - goimghdr。 Github地址:https://github.com/corona10/goimghdr 在图像处理和分析过程中,识别图像文件的类型是一个常见的需求。Python自带的imghdr…

AT32F415 使用embedded studio笔记

由于Embedded Studio还没有支持雅特力的支持包,因此通过MDK的工程无法直接导入到embedded studio中。需要自己新建一个工程。 新建的时候是可以选择雅特力的单片机的。 工程新建好后,默认会包含3个文件。如下图所示。其中两个汇编文件的作用是之前MDK的…

出现 Transaction rolled back because it has been marked as rollback-only 解决方法

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 用户反馈的Bug如下所示: Transaction rolled back because it has been marked as rollback-only截图如下: 浏览器终端同样显示: 2. 原理分析 错误表明,在事务的生命周期内,遇到了某个异常或条件,导致该事务被标记…

Vue3学习使用axios和qs进行POST请求和响应处理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、前言1.准备工作2.发送POST请求3.处理响应数据4.总结 一、前言 在前端开发中,经常需要与后端进行数据交互,其中包括发送POST请求并处理响…

2024年中国金融行业网络安全市场全景图

网络安全一直是国家安全的核心组成部分,特别是在金融行业,金融机构拥有大量的敏感数据,包括个人信息、交易记录、财务报告等,这些数据的安全直接关系到消费者的利益和金融市场的稳定,因此金融行业在网络安全建设领域一…

【机器学习】利用机器学习优化陆军战术决策与战场态势感知

🔒文章目录: 💥1.引言 🛴2.机器学习在陆军战术决策中的应用 🛣️2.1数据收集与预处理 🌄2.2模型构建与训练: 🌅2.3实时决策支持: 🌅2.4代码实现 &…

Genzai:一款针对物联网安全的多功能实用性工具套件

关于Genzai Genzai是一款针对物联网安全的多功能实用性工具套件,该工具旨在识别与物联网相关的仪表盘,并扫描它们以查找默认密码和安全问题,广大研究人员可以使用该工具来检测和提升物联网设备的安全性。 Genzai支持用户以输入的形式提供一个…

电子围栏(地理围栏)设计逻辑

做完整的项目时需要考虑安全问题,判断车辆在不该出现的位置出现时自动刹车。 只能说可以有吧。 地理围栏的概念 自动驾驶地理围栏是指在自动驾驶系统中定义的一种虚拟边界,用于限制车辆的运行范围。地理围栏可以通过全球定位系统(GPS&#…

nginx设置一个TCP代理(用于RDP连接)

在 Nginx 中,stream 上下文必须在 http 上下文之外,并且只能位于顶级配置文件中或包含在主配置文件中的单独文件中。 Nginx 的配置文件通常包含一个 http 块,用于处理 HTTP 和 HTTPS 请求,但是 stream 块是独立的,并且…

Acrobat Pro DC 2024 Mac软件安装包下载PDF2024 Mac安装教程

安装 步骤 1,双击打开下载好的安装包。 2,选择acrobat dc installer.pkg双击启动安装程序。 3,点击继续。 4,点击继续。 5,点击继续。 6,点击安装。 7,输入电脑密码。 8,软件安装中…

香橙派 AIpro开发板初上手

一、香橙派 AIpro开箱 最近拿到了香橙派 AIpro(OrangePi AIpro),下面就是里面的板子和相关的配件。包含主板、散热组件、电源适配器、双C口电源线、32GB SD卡。我手上的这个是8G LPDDR4X运存的版本。 OrangePi AIpro开发板是一款由香橙派与华…

JAVA学习·String类的常用方法

String 类及其创建 String 类的创建 String 类是 Java 内置的一个类,其完全限定类名是java.lang.String。想要创建一个字符串有多重方式,比如创建字符串"Hello": String s1 "Hello"; // 字面量创建 String s2 new St…

linux部署rustdesk

1.拉取RustDesk镜像 sudo docker image pull rustdesk/rustdesk-server2.启动hbbs服务 sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v pwd:/root -td --nethost rustdesk/rustdesk-server hbbs3.启动hbbr服务 sudo dock…

如何从Android恢复已删除的文件?3 种有效的方式

有时我们可能会错误地删除Android设备上的重要文件。更疯狂的是,Android手机上的文件在一夜之间消失了,我们不知道为什么。我们感到非常遗憾和恼火,但不知道。但是,此时学习如何从Android手机恢复已删除的文件为时已晚&#xff0c…

Mesa Gallium框架入门初探

Mesa Gallium框架入门初探 MESA Gallium框架 MESA源码里面有2套架构,现在驱动主要基于Gallium架构。 这里我们重点来看看Gallium架构: 经典架构 Gallium架构 Gallium展开 Gallium中主要包含下面几块: Auxiliary模块:一些公共函数或者辅助…

Word如何绘制三线表及设置磅值

插入表格, 开始 边框 边框和低温 设置磅值 先全部设置为无边框 上边 1.5 0.5 以上内容未完善,请等待作者更新

内网权限提升

打点进入内网中,权限一般为 web 服务的权限 1、什么是提权 一般一来说是低权限用户去申请高权限用户,可以是(配置不当、溢出类漏洞(历史漏洞)、本地漏洞) 2、常见用户分类 windows: 本地登录…