数据库管理-第207期 HTAP核心:列存技术探索(20240619)

数据库管理207期 2024-06-19

  • 数据库管理-第207期 HTAP核心:列存技术探索(20240619)
    • 1 Oracle In-memory
      • 1.1 基本概念
      • 1.2 基本测试
      • 1.3 Exadata增强
    • 2 OceanBase
    • 3 TiDB
    • 4 PolarDB
    • 总结

数据库管理-第207期 HTAP核心:列存技术探索(20240619)

作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database(Oracle与MySQL)
PostgreSQL ACE Partner
10年数据库行业经验,现主要从事数据库服务工作
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP、认证技术专家、年度墨力之星,ITPUB认证专家、专家百人团成员,OCM讲师,PolarDB开源社区技术顾问,HaloDB外聘技术顾问,OceanBase观察团成员,青学会MOP技术社区(青年数据库学习互助会)技术顾问
圈内拥有“总监”、“保安”、“国产数据库最大敌人”等称号,非著名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸;CSDN:胖头鱼的鱼缸(尹海文);墨天轮:胖头鱼的鱼缸;ITPUB:yhw1809。
除授权转载并标明出处外,均为“非法”抄袭

HTAP,之前的文章里面介绍了很多次了,简单点就是Online TP+AP,既满足在线交易需求,也满足部分实时数据分析的要求。而解决HTAP场景目前主流的方法就是在行存的基础上通过列存来实现快速分析。

1 Oracle In-memory

以下内容基于Oracle Database 23ai。

1.1 基本概念

Oracle In-memory功能集包括In-Memory列式存储(IM列存储)、高级查询优化和可用性解决方案。In-memory优化使得在数据仓库和混合使用数据库场景中能更快的运行大数据量分析查询。
image.png
以下对象可以使用In-Memory:

  • 列(包含虚拟列)
  • 表分区(内部或外部表)
  • 表(内部或外部表)和物化视图
  • 表空间

在Oracle数据库中使用In-memory需要现在SGA中分配一个专门用于In-memory的固定大小的内存区域并重启数据库来开启这一功能:

ALTER SYSTEM SET INMEMORY_SIZE = 16G SCOPE=SPFILE;
-- Restart the database

后续如需增加则只需要通过SCOPE=BOTH调整即可,无需重启数据库。然后可以通过自动或手动的方式将上面的对象加载到In-memory内存区域中。
Oracle In-memory还支持不同级别的压缩:FOR DML, FOR QUERY (LOW or HIGH), FOR CAPACITY (LOW or HIGH), or NONE。或者指定为AUTO(需配合数据库参数INMEMORY_AUTOMATIC_LEVEL)由数据库自动判断压缩级别。
image.png

CREATE TABLE range_sales
    ( prod_id        NUMBER(6)
    , cust_id        NUMBER
    , time_id        DATE
    , channel_id     CHAR(1)
    , promo_id       NUMBER(6)
    , quantity_sold  NUMBER(3)
    , amount_sold    NUMBER(10,2)
    ) 
PARTITION BY RANGE (time_id)
  (PARTITION SALES_Q4_1999 
      VALUES LESS THAN (TO_DATE('01-JAN-2015','DD-MON-YYYY'))
      INMEMORY MEMCOMPRESS FOR DML,
   PARTITION SALES_Q1_2000 
      VALUES LESS THAN (TO_DATE('01-APR-2015','DD-MON-YYYY'))
      INMEMORY MEMCOMPRESS FOR QUERY,
   PARTITION SALES_Q2_2000 
      VALUES LESS THAN (TO_DATE('01-JUL-2015','DD-MON-YYYY'))
      INMEMORY MEMCOMPRESS FOR CAPACITY,
   PARTITION SALES_Q3_2000 
      VALUES LESS THAN (TO_DATE('01-OCT-2015','DD-MON-YYYY'))
      NO INMEMORY,
   PARTITION SALES_Q4_2000 
      VALUES LESS THAN (MAXVALUE));

ALTER TABLE sh.countries INMEMORY MEMCOMPRESS FOR CAPACITY HIGH;

ALTER TABLE sh.countries INMEMORY MEMCOMPRESS AUTO;

ALTER TABLE oe.product_information  
   INMEMORY MEMCOMPRESS FOR QUERY (
      product_id, product_name, category_id, supplier_id, min_price)
   INMEMORY MEMCOMPRESS FOR CAPACITY HIGH (
      product_description, warranty_period, product_status, list_price)
   NO INMEMORY (
      weight_class, catalog_url);

数据库根据加载在配置了In-memory的对象的使用情况将对应数据加载到In-memory内存区域中,也可以使用full scan或者对应的PL/SQL来实现:

SELECT /*+ FULL(customers) NO_PARALLEL(customers) */ COUNT(*) FROM customers;

BEGIN
  DBMS_INMEMORY.POPULATE( schema_name => 'SH', table_name => 'CUSTOMERS');
END;
/

1.2 基本测试

create table im_test as select * from dba_source;

--将表信息加载至内存buffer cache中
select /*+ full noparallel */ count(*) from im_test;

image.png

set timing on
set autotrace on
select /*+ use cache */ max(line) from im_test;

image.png

alter table im_test inmemory;
exec DBMS_INMEMORY.POPULATE( schema_name => 'TEST', table_name => 'IM_TEST');
select /*+ use inmemory */ max(line) from im_test;

image.png
从执行时间和执行计划来看,In-memory还是带来了十分显著的性能提升,这里由于数据量的问题就不做不同压缩级别下的对比测试了。

1.3 Exadata增强

在Exadata中可以在计算节点使用行存或列存,在存储节点中则可以在PMEM/XRMEM和Flash Cache中实现列存,从而在整体架构中实现行列混存,以统一架构应对HTAP挑战。

2 OceanBase

这里基本上就搬运官方文档了(https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000819423),更多详细内容可以查看:参考指南->系统原理->存储架构->数据存储

在V4.3.0 版本,基于原有技术的积累,OceanBase 数据库的存储引擎继续扩展,实现了对列存的支持,实现存储一体化,一套代码一个架构一个 OBServer,列存数据和行存数据完美共存,真正实现了对 TP 类和 AP 类查询的性能的兼顾。
OceanBase 数据库作为原生分布式数据库,用户数据默认为多副本存储。为了利用多副本的优势,进一步增强用户在数据强校验以及迁移数据重用等方面的体验,自研的 LSM-Tree 存储引擎也做了较多的针对性设计。首先,每个用户数据整体可以分成以下两大部分:

  • 基线数据
    不同于其它主流 LSM-Tree 存储引擎的数据库,OceanBase 数据库利用分布式多副本的基础,提出了 “每日合并” 的概念,租户会定期或者根据用户操作选择一个全局版本号,租户数据的所有副本均以该版本完成一轮 Major Compaction,最后生成该版本的基线数据。所有副本同一个版本的基线数据物理上完全一致。
  • 增量数据
    相对基线数据而言,用户数据在最新版本的基线数据之后所有写入的数据均属于增量数据。具体来说,增量数据可以是用户刚写入 MemTable 的内存数据,也可以是已经转储为 SSTable 的磁盘数据。 对于用户数据的所有副本来说,增量数据中的各个副本独立维护,不保证一致,并且不同于基线数据是基于指定版本生成,增量数据会包含所有多版本数据。

基于列存应用场景随机更新量可控的背景,OceanBase 数据库结合自身基线数据和增量数据的特点,提出了一套对上层透明的列存实现方式:

  • 基线数据存储为列存模式,增量数据保持行存,用户的所有 DML 操作不受影响,上下游同步无缝接入,列存表数据仍然可以像行存表一样进行所有事务操作。
  • 列存模式下,每列数据存储为一个独立的 SSTable,所有列的 SSTable 组合成为一个虚拟 SSTable 作为用户的列存基线数据,如下图所示。
  • 根据用户建表时指定的表的存储模式,基线数据可以有行存、列存、行存列存冗余三种模式。

image.png
image.png
OceanBase实现了SQL一体化、存储一体化、事务一体化。

3 TiDB

这里也基本搬运官方文档(https://docs.pingcap.com/zh/tidb/stable/tiflash-overview)

TiFlash 是 TiDB HTAP 形态的关键组件,它是 TiKV 的列存扩展,在提供了良好的隔离性的同时,也兼顾了强一致性。列存副本通过 Raft Learner 协议异步复制,但是在读取的时候通过 Raft 校对索引配合 MVCC 的方式获得 Snapshot Isolation 的一致性隔离级别。这个架构很好地解决了 HTAP 场景的隔离性以及列存同步的问题。
TiDB主要是在存算分离的存储层面,在TiKV节点之外使用TiFlashTiFlash 提供列式存储,且拥有借助 ClickHouse 高效实现的协处理器层。除此以外,它与 TiKV 非常类似,依赖同样的 Multi-Raft 体系,以 Region 为单位进行数据复制和分散。
TiFlash 以低消耗不阻塞 TiKV 写入的方式,实时复制 TiKV 集群中的数据,并同时提供与 TiKV 一样的一致性读取,且可以保证读取到最新的数据。TiFlash 中的 Region 副本与 TiKV 中完全对应,且会跟随 TiKV 中的 Leader 副本同时进行分裂与合并。
image.png

关于OceanBase和TiDB列式存储的对比,来自TiDB社区的表妹也写了一篇文章,可以参考:《我对 TiDB 和 OceanBase 列存的一些思考》https://mp.weixin.qq.com/s/_TDsP2ydsiFczRhrrqmolQ

4 PolarDB

继续继续,源自于PolarDB MySQL版的特性(https://help.aliyun.com/zh/polardb/polardb-for-mysql/user-guide/overview-29?spm=a2c4g.11186623.0.nextDoc.1095b805ivu1Ku)

PolarDB MySQL版的列存索引(In-Memory Column Index,简称IMCI)面向OLAP场景大数据量复杂查询。通过列存索引,PolarDB MySQL版实现了一体化的实时事务处理和实时数据分析的能力,成为一站式HTAP数据库产品解决方案。通过一套数据库系统,即可满足业务的OLTP及OLAP需求。
为了实现OLAP和OLTP的计算资源隔离,当前仅支持在只读节点上实现列存索引,即OLAP查询请求只发给只读节点,而不会发给主节点。
image.png
从以上架构图可以看到,PolarDB MySQL版从存储引擎、执行算子、优化器三个层面设计了列存索引的特性:

  • 存储引擎:支持实时事务级别一致性的行列混合存储;
  • 执行算子:面向列存的向量化并行执行算子,支持极速的单表和多表查询;
  • SQL Parser/优化器:面向行列混合存储的CBO优化器,可以根据代价自动选择行存或者列存执行查询请求;

在此架构下,PolarDB MySQL版实现了100%兼容MySQL协议的基础上,同时获得数个数量级的查询加速效果。

总结

本期简单介绍了Oracle、OceanBase、TiDB和PolarDB的列存技术特性。
老规矩,算是知道写了些啥吧。

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

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

相关文章

atcoder abc 358

A welcome to AtCoder Land 题目&#xff1a; 思路&#xff1a;字符串比较 代码&#xff1a; #include <bits/stdc.h>using namespace std;int main() {string a, b;cin >> a >> b;if(a "AtCoder" && b "Land") cout <&…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 目录管理器(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 目录管理器(200分) 🌍 评测功能需要订阅专栏后私信联系清隆…

无限滚动表格

纵向无限滚动 单元格内部横向滚动 <!--* Description: 横向、纵向滚动表格* Author: liyanfeng liyanfenghopewind.com* Date: 2024-06-15 16:06:57* LastEditors: liyanfeng liyanfenghopewind.com* LastEditTime: 2024-06-20 17:15:37* FilePath: \plus-ui\src\componen…

Python武器库开发-武器库篇之ThinkPHP 2.x 任意代码执行漏洞(六十三)

Python武器库开发-武器库篇之ThinkPHP 2.x 任意代码执行漏洞&#xff08;六十三&#xff09; PHP代码审计简介 PHP代码审计是指对PHP程序进行安全审计&#xff0c;以发现潜在的安全漏洞和风险。PHP是一种流行的服务器端脚本语言&#xff0c;广泛用于开发网站和Web应用程序。由…

8.华为两台交换机的三种连接方式access 、trunk、undo portswitch

目的&#xff1a;两台三层交换机的三种连接方式 1.access 2.trunk 3.undo portswitch 模拟机不支持此配置&#xff0c;实体机支持 第一种access CE1配置 [~HUAWEI]vlan batch 10 [~HUAWEI]int Vlanif 10 [~HUAWEI-Vlanif10]ip add 10.10.10.1 24 [~HUAWEI]int g1/0/0 [~HUAWE…

乌班图Ubuntu 24.04 SSH Server 修改默认端口重启无效

试用最新的乌班图版本&#xff0c;常规修改ssh端口&#xff0c;修改完毕后重启sshd提示没有找到service&#xff0c;然后尝试去掉d重启ssh后查看状态&#xff0c;端口仍然是默认的22&#xff0c;各种尝试都试了不行&#xff0c;重启服务器后倒是端口修改成功了&#xff0c;心想…

用RNN构建人名分类器

目录 项目综述1.导入必备的工具包2.处理数据&#xff0c;满足训练要求2.1 统计常用的字符2.2 进行规范化处理,去除重音符号2.3 将文件读取到内存中2.4 构建人名国家和具体人名的对应关系2.5 one-hot编码 3.构建RNN模型3.1 构建传统RNN模型3.2 构建传统LSTM模型3.3 构建传统GRU模…

CPU飙升100%怎么办?字节跳动面试官告诉你答案!

小北说在前面 CPU占用率突然飙升是技术人员常遇到的一个棘手问题&#xff0c;它是一个与具体技术无关的普遍挑战。 这个问题可以很简单&#xff0c;也可以相当复杂。 有时候&#xff0c;只是一个死循环在作祟。 有时候&#xff0c;是死锁导致的。 有时候&#xff0c;代码中有…

基于STM32的智能工厂环境监测系统

目录 引言环境准备智能工厂环境监测系统基础代码实现&#xff1a;实现智能工厂环境监测系统 4.1 数据采集模块4.2 数据处理4.3 控制系统实现4.4 用户界面与数据可视化应用场景&#xff1a;智能工厂管理与优化问题解决方案与优化收尾与总结 1. 引言 智能工厂环境监测系统通过…

AI语言文字工具类API实现自动化的写作

热门实用的AI语言文字工具类API是当今开发者们追逐的宝藏。这些API利用先进的人工智能和自然语言处理技术&#xff0c;为开发者提供了一系列实用而强大的语言文字处理能力。这些API包括了文本翻译、情感分析、智能写作、关键词提取、语言检测等功能&#xff0c;使得开发者能够轻…

Vue82-组件内路由守卫

一、组件内路由守卫的定义 在一个组件里面去写路由守卫&#xff0c;而不是在路由配置文件index.js中去写。 此时&#xff0c;该路由守卫是改组件所独有的&#xff01; 只有通过路由规则进入的方式&#xff0c;才会调这两个函数&#xff0c;否则&#xff0c;若是只是用<Ab…

C# 实现去除多行文本框光标闪烁,并设置行距

一、前言 本篇主要通过继承RichTextBox 的方式实现去除多行文本框的光标闪烁&#xff0c;以及能够设置行距大小&#xff0c;这是因为C#提供的TextBox 和 RichTextBox 本身无这样的功能 二、代码 封装 RichTextBox 为CustomTextBox using System; using System.Collections.Ge…

MinIO 网络与覆盖网络

云计算和容器化技术的发展改变了应用程序的开发、部署和管理方式。这种转变给网络环境带来了重大变化&#xff0c;为DevOps和SRE工程师带来了新的挑战和机遇。然而&#xff0c;在这种转变中&#xff0c;出现了明显的知识差距&#xff0c;特别是在理解物理网络和硬件背景下网络的…

【免费】中国电子学会2024年03月份青少年软件编程Python等级考试试卷一级真题(含答案)

2024-03 Python一级真题 分数&#xff1a;100 题数&#xff1a;37 测试时长&#xff1a;60min 一、单选题(共25题&#xff0c;共50分) 1. 下列哪个命令&#xff0c;可以将2024转换成2024 呢&#xff1f;&#xff08; A&#xff09;(2分) A.str(2024) B.int(2024) C.fl…

教育培训机构寒暑假班学校公众号小程序

&#x1f4da;教育培训学校公众号版本&#xff1a;开启学习新纪元&#x1f680; 一、引言&#xff1a;为何教育培训学校需要公众号版本&#xff1f; 随着数字化时代的来临&#xff0c;传统教育培训行业也在不断探索新的服务模式。公众号作为新媒体平台的一种&#xff0c;具有信…

CentOS 7 安装部署Cassandra4.1.5

一、Cassandra的介绍 Cassandra是一套开源分布式NoSQL数据库系统。它最初由Facebook开发&#xff0c;用于储存收件箱等简单格式数据&#xff0c;集GoogleBigTable的数据模型与Amazon Dynamo的完全分布式的架构于一身Facebook于2008将 Cassandra 开源&#xff0c;此后&#xff0…

如何解决压缩软件无法打开文件的常见问题

压缩软件是我们日常生活和工作中常用的工具&#xff0c;无论是传输文件、节省存储空间还是组织数据&#xff0c;它们都能发挥重要作用。然而&#xff0c;偶尔也会遇到压缩软件无法打开文件的情况&#xff0c;这可能令人困惑和沮丧。本文将探讨几种常见原因&#xff0c;并提供解…

计算机网络(物理层)

物理层 物理层最核心的工作内容就是解决比特流在线路上传输的问题 基本概念 何为物理层&#xff1f;笼统的讲&#xff0c;就是传输比特流的。 可以着重看一下物理层主要任务的特性 传输媒体 传输媒体举例&#xff1a; 引导型传输媒体 引导型传输媒体指的是信号通过某种…

数字营销新玩法:拓新与裂变的完美结合

在当今这个飞速发展的数字化时代&#xff0c;数字营销已经成为了企业发展中至关重要的一环。拓新&#xff0c;简单来说就是不断去开拓新的客户群体&#xff0c;让更多的人了解并接触到我们的产品或服务。要做到这一点&#xff0c;那可得充分利用各种线上渠道。像热闹非凡的社交…

Intel太无耻,跟着玩数字游戏还揭台积电的老底,工艺都是假的

在台积电的3纳米逐渐获得芯片企业认可的情况下&#xff0c;近日Intel却再次指出台积电的3纳米工艺并非真正的3纳米&#xff0c;与Intel的7纳米工艺差不多&#xff0c;这显示出Intel在芯片工艺研发方面日益落后的情况下确实有点慌了。 Intel指出它的7纳米工艺的晶体管密度达到1.…