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

从Oracle和TiDB的HTAP说起

除了数据库行业其他技术群体很多不知道HTAP的

时至今日还是有很多人迷信Hadoop,觉得大数据就是Hadoop。这是不正确的。也难怪这样,很多人OLTP和OLAP也分不清,何况HTAP。

Oracle是垂直方向实现

TiDB是水平方向实现

我个人认为这是两种流派,清蒸和红烧就看自己的主观口味了

OceanBase和Polardb的HTAP也是大同小异

需要的就是类似具体如何实现的中文化文档

仅为简单应用对比不涉及详细

因工作上涉及到了TIDB,那么就想既然用了就把他最大限度发挥出来。TiDB其中一大特性就是HTAP。出于对于HTAP的认可以及对于Hadoop的不喜欢,只要是能替换的我绝对支持。可能有人问我为什么不喜欢Hadoop,因为我学习以后觉得浪费了我的钱和时间。然后在工作中遇到的简单问题复杂化,硬是让企业走了很多弯路还解决不了问题,给所有人只是增加了麻烦。

Oracle走垂直路线

select * from v$inmemory_area;

查看内存区域大小

alter system set inmemory_size=800M scope=spfile;

这个需要重启实例,且要在CDB执行。

XXG@xxg> alter system set inmemory_max_populate_servers=2;
alter system set inmemory_max_populate_servers=2
*
第 1 行出现错误:
ORA-65040: 不允许从插接式数据库内部执行该操作

这个也要在CDB执行。

XXG@xxg> select * from v$inmemory_area;

POOL ALLOC_BYTES USED_BYTES

POPULATE_STATUS CON_ID

1MB POOL 586153984 0

DONE 8

64KB POOL 234881024 0

DONE 8

查询分配的内存。然后把表加载到内存中用列存。

数据加载到内存行列混存(在官网文档中有)
XXG@xxg> alter table big inmemory;

表已更改。

这个是有一个过程的。其实今天写这个像说明,第一次这种做转换都是要过程的。

做好了以后后续就实时的行列混存了。如果表大这里可以看到USED_BYTES会变化。

加载完成后。
XXG@xxg> set timing on;
XXG@xxg> set autotrace on;
XXG@xxg> select count(n) from big;

COUNT(N)
9000000

已用时间: 00: 00: 00.11

执行计划
Plan hash value: 3110421800

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 1 | 6 | 566 (7)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 6 | | |
| 2 | TABLE ACCESS INMEMORY FULL| BIG | 9000K| 51M| 566 (7)| 00:00:01 |
统计信息
213 recursive calls
0 db block gets
284 consistent gets
0 physical reads
0 redo size
551 bytes sent via SQLNet to client
387 bytes received via SQL
Net from client
2 SQL*Net roundtrips to/from client
20 sorts (memory)
0 sorts (disk)
1 rows processed
XXG@xxg> select avg(n) from big;

AVG(N)
4222223.22

已用时间: 00: 00: 00.02

执行计划
Plan hash value: 3110421800

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 1 | 6 | 566 (7)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 6 | | |
| 2 | TABLE ACCESS INMEMORY FULL| BIG | 9000K| 51M| 566 (7)| 00:00:01 |
在千万级别(数据是900万)都在零点几秒就完成了。从执行计划看几乎就是读了几下内存而已。

TIDB走水平路线

也构造一定数量的表。并且安装的时候安装了tiflash组件。

数据从TiKV加载TiFlash中行列混存(在官网文档中没有直接写,在论坛中有实践文档)
相比较而言有些国产,可能没有论坛。只能靠交付和支持的人了。

mysql> ALTER TABLE xxg SET TIFLASH REPLICA 1;
Query OK, 0 rows affected (0.14 sec)

在没有加载tiflash时候,执行计划是这样的。task一列是tikv。

mysql> explain select * from xxg;
±----------------------±------------±----------±--------------±---------------------+
| id | estRows | task | access object | operator info |
±----------------------±------------±----------±--------------±---------------------+
| TableReader_5 | 11600116.00 | root | | data:TableFullScan_4 |
| └─TableFullScan_4 | 11600116.00 | cop[tikv] | table:xxg | keep order:false |
±----------------------±------------±----------±--------------±---------------------+
2 rows in set (0.00 sec)

在加载tiflash时候,执行计划是这样的。task一列是tiflash。
mysql> explain select * from xxg;
±-------------------------±------------±-------------±--------------±--------------------------------------+
| id | estRows | task | access object | operator info |
±-------------------------±------------±-------------±--------------±--------------------------------------+
| TableReader_12 | 11600116.00 | root | | MppVersion: 2, data:ExchangeSender_11 |
| └─ExchangeSender_11 | 11600116.00 | mpp[tiflash] | | ExchangeType: PassThrough |
| └─TableFullScan_10 | 11600116.00 | mpp[tiflash] | table:xxg | keep order:false |
±-------------------------±------------±-------------±--------------±--------------------------------------+
3 rows in set (0.01 sec)

注意过程,这也是今天这里要说的。

PROGRESS从0到1的过程就是观测加载的进度。

mysql> SELECT * FROM information_schema.tiflash_replica;
±-------------±--------------------±---------±--------------±----------------±----------±---------+
| TABLE_SCHEMA | TABLE_NAME | TABLE_ID | REPLICA_COUNT | LOCATION_LABELS | AVAILABLE | PROGRESS |
±-------------±--------------------±---------±--------------±----------------±----------±---------+
| zhigate | request_api_log_bak | 233 | 1 | | 1 | 1 |
| zhigate | request_api_log | 112 | 1 | | 1 | 1 |
| xxg | xxg | 339 | 1 | | 0 | 0 |
| xxg | t | 173 | 1 | | 1 | 1 |
±-------------±--------------------±---------±--------------±----------------±----------±---------+
4 rows in set (0.01 sec)

mysql> SELECT * FROM information_schema.tiflash_replica;
±-------------±--------------------±---------±--------------±----------------±----------±---------+
| TABLE_SCHEMA | TABLE_NAME | TABLE_ID | REPLICA_COUNT | LOCATION_LABELS | AVAILABLE | PROGRESS |
±-------------±--------------------±---------±--------------±----------------±----------±---------+
| zhigate | request_api_log_bak | 233 | 1 | | 1 | 1 |
| zhigate | request_api_log | 112 | 1 | | 1 | 1 |
| xxg | xxg | 339 | 1 | | 0 | 0.2 |
| xxg | t | 173 | 1 | | 1 | 1 |
±-------------±--------------------±---------±--------------±----------------±----------±---------+
4 rows in set (0.00 sec)

mysql> SELECT * FROM information_schema.tiflash_replica;
±-------------±--------------------±---------±--------------±----------------±----------±---------+
| TABLE_SCHEMA | TABLE_NAME | TABLE_ID | REPLICA_COUNT | LOCATION_LABELS | AVAILABLE | PROGRESS |
±-------------±--------------------±---------±--------------±----------------±----------±---------+
| zhigate | request_api_log_bak | 233 | 1 | | 1 | 1 |
| zhigate | request_api_log | 112 | 1 | | 1 | 1 |
| xxg | xxg | 339 | 1 | | 0 | 0.6 |
| xxg | t | 173 | 1 | | 1 | 1 |
±-------------±--------------------±---------±--------------±----------------±----------±---------+
4 rows in set (0.00 sec)

mysql> SELECT * FROM information_schema.tiflash_replica;
±-------------±--------------------±---------±--------------±----------------±----------±---------+
| TABLE_SCHEMA | TABLE_NAME | TABLE_ID | REPLICA_COUNT | LOCATION_LABELS | AVAILABLE | PROGRESS |
±-------------±--------------------±---------±--------------±----------------±----------±---------+
| zhigate | request_api_log_bak | 233 | 1 | | 1 | 1 |
| zhigate | request_api_log | 112 | 1 | | 1 | 1 |
| xxg | xxg | 339 | 1 | | 1 | 1 |
| xxg | t | 173 | 1 | | 1 | 1 |
±-------------±--------------------±---------±--------------±----------------±----------±---------+
4 rows in set (0.00 sec)

执行完毕后。查询结果是这样的。

mysql> SELECT * FROM information_schema.tiflash_replica where table_name=‘xxg’;
±-------------±-----------±---------±--------------±----------------±----------±---------+
| TABLE_SCHEMA | TABLE_NAME | TABLE_ID | REPLICA_COUNT | LOCATION_LABELS | AVAILABLE | PROGRESS |
±-------------±-----------±---------±--------------±----------------±----------±---------+
| xxg | xxg | 339 | 1 | | 1 | 1 |
±-------------±-----------±---------±--------------±----------------±----------±---------+
1 row in set (0.01 sec)

再看效果。
mysql> select count() from xxg;
±---------+
| count() |
±---------+
| 11600116 |
±---------+
1 row in set (0.11 sec)

mysql> select sum(id) from xxg;
±---------------+
| sum(id) |
±---------------+
| 67281351406786 |
±---------------+
1 row in set (0.08 sec)

也同样是零点几秒。

观点

无论怎么做,大方向都是要列存的,水平的内存和垂直的内存都是内存。省是省不掉的。至于细节的向量化以及并行今天不讨论。主要说明。硬件代价是必须付出的。

相关文章:

从Oracle和TiDB的HTAP说起

除了数据库行业其他技术群体很多不知道HTAP的 时至今日还是有很多人迷信Hadoop,觉得大数据就是Hadoop。这是不正确的。也难怪这样,很多人OLTP和OLAP也分不清,何况HTAP。 Oracle是垂直方向实现 TiDB是水平方向实现 我个人认为这是两种流派…...

深入解析Spring Boot自动装配:原理、设计与最佳实践

引言 Spring Boot作为现代Java开发中的一股清流,凭借其简洁、快速和高效的特性,迅速赢得了广大开发者的青睐。而在Spring Boot的众多特性中,自动装载(Auto-configuration)无疑是最为耀眼的明珠之一。本文将深入剖析Sp…...

初识数据结构——算法效率的“两面性”:时间与空间复杂度全解析

&#x1f4ca; 算法效率的“两面性”&#xff1a;时间与空间复杂度全解析 1️⃣ 如何衡量算法好坏&#xff1f; 举个栗子&#x1f330;&#xff1a;斐波那契数列的递归实现 public static long Fib(int N) {if(N < 3) return 1;return Fib(N-1) Fib(N-2); }问题&#xf…...

【USRP】srsRAN 开源 4G 软件无线电套件

srsRAN 是SRS开发的开源 4G 软件无线电套件。 srsRAN套件包括&#xff1a; srsUE - 具有原型 5G 功能的全栈 SDR 4G UE 应用程序srsENB - 全栈 SDR 4G eNodeB 应用程序srsEPC——具有 MME、HSS 和 S/P-GW 的轻量级 4G 核心网络实现 安装系统 Ubuntu 20.04 USRP B210 sudo …...

《从零搭建Vue3项目实战》(AI辅助搭建Vue3+ElemntPlus后台管理项目)零基础入门系列第二篇:项目创建和初始化

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 《从零搭建Vue3项目实战》&#xff08;AI辅助…...

简单线程池实现

线程池的概念 线程池内部可以预先去进行创建出一批线程&#xff0c;对于每一个线程&#xff0c;它都会周期性的进行我们的任务处理。 线程内部在维护一个任务队列&#xff0c;其中我们外部可以向任务队列里放任务&#xff0c;然后内部的线程从任务队列里取任务&#xff0c;如…...

CentOS7 安装 LLaMA-Factory

虚拟机尽量搞大 硬盘我配置了80G&#xff0c;内存20G 下载源码 git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git 如果下载不了&#xff0c;可以进入github手动下载&#xff0c;然后在传入服务器。 也可以去码云搜索后下载 安装conda CentOS7安装conda…...

最新扣子(Coze)案例教程:最新抖音视频文案提取方法替代方案,音频视频提取文案插件制作,手把手教学,完全免费教程

&#x1f468;‍&#x1f4bb; 星球群同学反馈&#xff0c;扣子平台的视频提取插件已下架&#xff0c;很多智能体及工作流不能使用&#xff0c;斜杠君这里研究了一个替代方案分享给大家。 方案原理&#xff1a;无论是任何视频或音频转文案&#xff0c;我们提取的方式首先都是要…...

三防笔记本有什么用 | 三防笔记本有什么特别

在现代社会&#xff0c;随着科技的不断进步&#xff0c;笔记本电脑已经成为人们工作和生活的重要工具。然而&#xff0c;在一些特殊的工作环境和极端条件下&#xff0c;普通笔记本电脑往往难以满足需求。这时&#xff0c;三防笔记本以其独特的设计和卓越的性能&#xff0c;成为…...

硬盘分区格式之GPT(GUID Partition Table)笔记250406

硬盘分区格式之GPT&#xff08;GUID Partition Table&#xff09;笔记250406 GPT&#xff08;GUID Partition Table&#xff09;硬盘分区格式详解 GPT&#xff08;GUID Partition Table&#xff09;是替代传统 MBR 的现代分区方案&#xff0c;专为 UEFI&#xff08;统一可扩展固…...

adb检测不到原来的设备List of devices attached解决办法

进设备管理器-通用串行总线设备 卸载无法检测到的设备驱动 重新拔插数据线...

案例分享(七):实现Apache-sharding-proxy的监控

案例分享(七):实现Apache-sharding-proxy的监控 背景部署流程背景 因业务需求,实现Apache-sharding-proxy的监控(基于Apache-sharding-agent)。 部署流程 1.下载agent的包,选择与sharding版本一致,要不然无法启动sharding 2.点击5.3.0之后可以看到有sharding,proxy…...

docker 安装 awvs15

安装好 docker bash <(curl -sLk https://www.fahai.org/aDisk/Awvs/check.sh) xrsec/awvs:v15等待完成后访问即可 地址: https://server_ip:3443/#/login UserName: awvsawvs.lan PassWord: Awvsawvs.lan修改密码 docker ps -a //查看容器&#xff0c;找到相应id d…...

Kafka在Vue和Spring Boot中的使用实例

Kafka在Vue和Spring Boot中的使用实例 一、项目概述 本项目演示了如何在Vue前端和Spring Boot后端中集成Kafka&#xff0c;实现实时消息的发送和接收&#xff0c;以及数据的实时展示。 后端实现&#xff1a;springboot配置、kafka配置、消息模型和仓库、消息服务和消费者、we…...

JSON 是什么?通俗详解

**JSON 是什么&#xff1f;通俗详解** --- ### **1. 一句话总结** **JSON&#xff08;JavaScript Object Notation&#xff09;** 是一种轻量级的 **数据交换格式**&#xff0c;就像“数据的快递包装盒”&#xff0c;用来在不同系统之间 **传递和存储信息**&#xff0c;简单易…...

Flutter:Flutter SDK版本控制,fvm安装使用

1、首先已经安装了Dart&#xff0c;cmd中执行 dart pub global activate fvm2、windows配置系统环境变量 fvm --version3、查看本地已安装的 Flutter 版本 fvm releases4、验证当前使用的 Flutter 版本&#xff1a; fvm flutter --version5、切换到特定版本的 Flutter fvm use …...

碰一碰发视频源头开发技术服务商

碰一碰发视频系统 随着短视频平台的兴起&#xff0c;用户的创作与分享需求日益增长。而如何让视频分享更加便捷、有趣&#xff0c;则成为各大平台优化的重点方向之一。抖音作为国内领先的短视频平台&#xff0c;在2023年推出了“碰一碰”功能&#xff0c;通过近距离通信技术实…...

Oracle 23ai Vector Search 系列之4 VECTOR数据类型和基本操作

文章目录 Oracle 23ai Vector Search 系列之4 VECTOR数据类型和基本操作VECTOR 数据类型基本语法Vector 维度限制和向量大小向量存储格式&#xff08;DENSE vs SPARSE&#xff09;1. DENSE存储2. SPARSE存储3. 内部存储与空间计算 Oracle VECTOR数据类型的声明格式VECTOR基本操…...

Java面试38-Dubbo是如何动态感知服务下线的?

首先&#xff0c;Dubbo默认采用Zookeeper实现服务注册与服务发现&#xff0c;就是多个Dubbo服务之间的通信地址&#xff0c;是使用Zookeeper来维护的。在Zookeeper上&#xff0c;会采用树形结构的方式来维护Dubbo服务提供端的协议地址&#xff0c;Dubbo服务消费端会从Zookeeper…...

C++day8

思维导图 牛客练习 练习 #include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector> #include <memory> using namespace std; class user{ public: …...

MySQL的进阶语法8(SQL优化——insert、主键、order by、group by、limit、count和update)

目录 一、插入数据 1.1 insert 1.2 大批量插入数据 二、主键优化 2.1 数据组织方式 2.2 页分裂 2.2.1 主键顺序插入效果 2.2.2 主键乱序插入效果 2.3 页合并 2.4 索引设计原则 三、order by优化 3.1 执行以下两条语句&#xff08;无索引&#xff09; 3.2 创建索引…...

STM32 基础2

STM32中断响应过程 1、中断源发出中断请求。 2、判断处理器是否允许中断&#xff0c;以及该中断源是否被屏蔽。 3、中断优先级排队。 4、处理器暂停当前程序&#xff0c;保护断点地址和处理器的当前状态&#xff0c;根据中断类型号&#xff0c;查找中断向量表&#xff0c;转到…...

前端单页应用性能优化全指南:从加载提速到极致体验

一、SPA性能瓶颈深度剖析 1.1 核心性能指标解读 指标健康阈值测量工具优化方向FCP (首次内容渲染)< 1.8sLighthouse资源加载优化TTI (可交互时间)< 3.5sWebPageTestJavaScript优化LCP (最大内容渲染)< 2.5sChrome DevTools渲染性能优化CLS (布局偏移)< 0.1PageSp…...

自然语言处理利器NLTK:从入门到核心功能解析

文章目录 一、NLP领域的基石工具包二、NLTK核心模块全景解析1 数据获取与预处理2 语言特征发现3 语义与推理 三、设计哲学与架构优势1 四维设计原则2 性能优化策略 四、典型应用场景1 学术研究2 工业实践 五、生态系统与未来演进 一、NLP领域的基石工具包 自然语言工具包&…...

简述Unity对多线程的支持限制和注意事项

Unity是一个以单线程为核心设计的游戏引擎&#xff0c;其主线程负责渲染、物理模拟、脚本更新&#xff08;如Update和FixedUpdate&#xff09;等核心功能。虽然Unity允许开发者使用C#的多线程功能&#xff08;如System.Threading命名空间&#xff09;来创建和管理线程&#xff…...

Mysql 中有哪些日志结构?

在 MySQL 中&#xff0c;日志文件是非常重要的&#xff0c;它们用于记录数据库的各类活动&#xff0c;帮助管理员进行监控、调试、恢复、以及优化数据库性能。MySQL 提供了几种类型的日志&#xff0c;每种日志都有其特定的用途。以下是 MySQL 中常见的几种日志类型&#xff1a;…...

【第2月 day17】Matplotlib 新手设计的直方图与饼图学习内容

以下是专为Python新手设计的直方图与饼图学习内容&#xff0c;包含基础知识、代码演示及注意事项&#xff1a; 一、直方图&#xff08;Histogram&#xff09; 1. 直方图的作用 展示数据分布情况&#xff08;如年龄分布、成绩分布&#xff09;观察数据集中趋势、离散程度 2. …...

使用Docker安装及使用最新版本的Jenkins

1. 拉取镜像 通过Windows powerShell执行命令行&#xff08;2选1&#xff09;&#xff1a; -- 长期支持版 docker pull jenkins/jenkins:lts-- 最新版 docker pull jenkins/jenkins:latest 2. 创建并执行容器 你可以通过以下命令来运行Jenkins容器&#xff0c;执行命令&…...

在Spring Boot中配置数据库连接

今天我们要谈谈如何在Spring Boot项目中配置数据库连接。我们会创建两个Java类&#xff1a;DatabaseProperties.java和DataSourceConfig.java&#xff0c;并在我们的应用程序中注入这些配置。让我们一起乘风破浪&#xff0c;开始这段编码之旅吧&#xff01; 目录 创建DatabaseP…...

Tiktok 关键字 视频及评论信息爬虫(2) [2025.04.07]

&#x1f64b;‍♀️Tiktok APP的基于关键字检索的视频及评论信息爬虫共分为两期&#xff0c;希望对大家有所帮助。 第一期&#xff1a;基于关键字检索的视频信息爬取 第二期见下文。 1.Node.js环境配置 首先配置 JavaScript 运行环境&#xff08;如 Node.js&#xff09;&…...