下一代实时数据库:Apache Doris 【六】数据划分

  • 3.4 数据划分
    • 3.4.1 列定义
    • 3.4.2 分区与分桶
    • 3.4.3 PROPERTIES
    • 3.4.4 ENGINE
    • 3.4.5 其他
  • 后记

3.4 数据划分

以 3.3.2 的建表示例来理解。

3.4.1 列定义

以 AGGREGATE KEY 数据模型为例进行说明。更多数据模型参阅 Doris 数据模型。 列的基本类型, 可以通过在 mysql-client 中执行 HELP CREATE TABLE; 查看。

AGGREGATE KEY 数据模型中, 所有没有指定聚合方式(SUM 、REPLACE 、MAX、 MIN) 的列视为 Key 列。而其余则为 Value 列。

定义列时, 可参照如下建议:

➢ Key 列必须在所有 Value 列之前。

➢ 尽量选择整型类型。因为整型类型的计算和查找比较效率远高于字符串。

➢ 对于不同长度的整型类型的选择原则,遵循够用即可。

➢ 对于 VARCHAR 和 STRING 类型的长度,遵循 够用即可。

➢ 所有列的总字节长度(包括 Key 和 Value)不能超过 100KB。

3.4.2 分区与分桶

Doris 支持两层的数据划分。第一层是 Partition,支持 Range 和 List 的划分方式。第二 层是 Bucket (Tablet), 仅支持 Hash 的划分方式。

也可以仅使用一层分区。使用一层分区时,只支持 Bucket 划分。

3.4.2.1 Partition

➢ Partition 列可以指定一列或多列。分区类必须为 KEY 列。多列分区的使用方式在

后面介绍。

➢ 不论分区列是什么类型, 在写分区值时, 都需要加双引号。

➢ 分区数量理论上没有上限。

➢ 当不使用 Partition 建表时,系统会自动生成一个和表名同名的,全值范围的

Partition。该 Partition 对用户不可见, 并且不可删改。

  1. Range 分区

分区列通常为时间列,以方便的管理新旧数据。不可添加范围重叠的分区。 Partition 指定范围的方式

⚫ VALUES LESS THAN (...) 仅指定上界,系统会将前一个分区的上界作为该分区的

下界,生成一个左闭右开的区间。分区的删除不会改变已存在分区的范围。删除分 区可能出现空洞。

⚫ VALUES [...) 指定同时指定上下界, 生成一个左闭右开的区间。

通过 VALUES [...) 同时指定上下界比较容易理解。这里举例说明,当使用 VALUES LESS THAN (...) 语句进行分区的增删操作时, 分区范围的变化情况:

(1) 如上 expamle_range_tbl 示例, 当建表完成后,会自动生成如下 3 个分区:

img
img

(2) 增加一个分区 p201705 VALUES LESS THAN ("2017-06-01") ,分区结果如下:

img
img

(3) 此时删除分区 p201703 ,则分区结果如下:

img
img

注意到 p201702 和 p201705 的分区范围并没有发生变化, 而这两个分区之间, 出现了 一个空洞:[2017-03-01, 2017-04-01)。即如果导入的数据范围在这个空洞范围内,是无法导 入的。

(4) 继续删除分区 p201702 ,分区结果如下:

img
img

空洞范围变为: [2017-02-01, 2017-04-01)

(5) 现在增加一个分区 p201702new VALUES LESS THAN ("2017-03-01"),分区结果

如下:

img
img

可以看到空洞范围缩小为:[2017-03-01, 2017-04-01)

(6)现在删除分区 p201701,并添加分区 p201612 VALUES LESS THAN ("2017-01-01"),

分区结果如下:

img
img

即出现了一个新的空洞: [2017-01-01, 2017-02-01)

  1. List 分区

分 区 列 支 持 BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, LARGEINT, DATE,

DATETIME, CHAR, VARCHAR 数据类型,分区值为枚举值。只有当数据为目标分区枚举值

其中之一时,才可以命中分区。不可添加范围重叠的分区。

Partition 支持通过 VALUES IN (...) 来指定每个分区包含的枚举值。下面通过示例说明, 进行分区的增删操作时, 分区的变化。

(1) 如上 example_list_tbl 示例, 当建表完成后,会自动生成如下 3 个分区:

img
img

(2) 增加一个分区 p_uk VALUES IN ("London"),分区结果如下:

img
img

(3) 删除分区 p_jp ,分区结果如下:

img
img

3.4.2.2 Bucket

(1) 如果使用了 Partition,则 DISTRIBUTED ... 语句描述的是数据在各个分区内的划 分规则。如果不使用 Partition ,则描述的是对整个表的数据的划分规则。

(2) 分桶列可以是多列,但必须为 Key 列。分桶列可以和 Partition 列相同或不同。

(3) 分桶列的选择,是在 查询吞吐 和 查询并发 之间的一种权衡:

① 如果选择多个分桶列,则数据分布更均匀。

如果一个查询条件不包含所有分桶列的等值条件,那么该查询会触发所有分桶同时 扫描,这样查询的吞吐会增加,单个查询的延迟随之降低。这个方式适合大吞吐低并发 的查询场景。

② 如果仅选择一个或少数分桶列,则对应的点查询可以仅触发一个分桶扫描。

此时,当多个点查询并发时, 这些查询有较大的概率分别触发不同的分桶扫描, 各 个查询之间的 IO 影响较小(尤其当不同桶分布在不同磁盘上时) ,所以这种方式适合 高并发的点查询场景。

(4) 分桶的数量理论上没有上限。

3.4.2.3 使用复合分区的场景

以下场景推荐使用复合分区

(1) 有时间维度或类似带有有序值的维度,可以以这类维度列作为分区列。分区粒度 可以根据导入频次、分区数据量等进行评估。

(2) 历史数据删除需求:如有删除历史数据的需求(比如仅保留最近 N 天的数据) 。 使用复合分区,可以通过删除历史分区来达到目的。也可以通过在指定分区内发送 DELETE 语句进行数据删除。

(3) 解决数据倾斜问题: 每个分区可以单独指定分桶数量。如按天分区,当每天的数 据量差异很大时, 可以通过指定分区的分桶数,合理划分不同分区的数据,分桶列建议选择 区分度大的列。

3.4.2.4 多列分区

Doris 支持指定多列作为分区列,示例如下:

  1. Range 分区
img
img

指定 date(DATE 类型) 和 id(INT 类型) 作为分区列。以上示例最终得到的分区如下:

p201701_1000: [(MIN_VALUE, MIN_VALUE), ("2017-02-01", "1000") ) p201702_2000: [("2017-02-01", "1000"), ("2017-03-01", "2000") ) p201703_all: [("2017-03-01", "2000"), ("2017-04-01", MIN_VALUE))

注意, 最后一个分区用户缺省只指定了 date 列的分区值,所以 id 列的分区值会默 认填充 MIN_VALUE。当用户插入数据时,分区列值会按照顺序依次比较,最终得到对应

的分区。举例如下:

img
img
  1. List 分区
img
img
img
img

当用户插入数据时, 分区列值会按照顺序依次比较,最终得到对应的分区。举例如下:

img
img

3.4.3 PROPERTIES

在建表语句的最后 PROPERTIES 中, 可以指定以下两个参数:

3.4.3.1 replication_num

每个 Tablet 的副本数量。默认为 3,建议保持默认即可。在建表语句中, 所有 Partition 中的 Tablet 副本数量统一指定。而在增加新分区时,可以单独指定新分区中 Tablet 的副本 数量。

副本数量可以在运行时修改。强烈建议保持奇数。

最大副本数量取决于集群中独立 IP 的数量(注意不是 BE 数量) 。Doris 中副本分布的 原则是,不允许同一个 Tablet 的副本分布在同一台物理机上, 而识别物理机即通过 IP。所 以, 即使在同一台物理机上部署了 3 个或更多 BE 实例,如果这些 BE 的 IP 相同,则依然只 能设置副本数为 1。

对于一些小,并且更新不频繁的维度表,可以考虑设置更多的副本数。这样在 Join 查询 时,可以有更大的概率进行本地数据 Join。

3.4.3.2 storage_medium & storage_cooldown_time

BE 的数据存储目录可以显式的指定为 SSD 或者 HDD (通过 .SSD 或者 .HDD 后缀 区分)。建表时,可以统一指定所有 Partition 初始存储的介质。注意,后缀作用是显式指 定磁盘介质,而不会检查是否与实际介质类型相符。

默认初始存储介质可通过 fe 的配置文件 fe.conf 中指定 default_storage_medium=xxx, 如果没有指定, 则默认为 HDD。如果指定为 SSD,则数据初始存放在 SSD 上。

如果没有指定 storage_cooldown_time,则默认 30 天后,数据会从 SSD 自动迁移到 HDD 上。如果指定了 storage_cooldown_time,则在到达 storage_cooldown_time 时间后,数据才会 迁移。

注意, 当指定 storage_medium 时,如果 FE 参数 enable_strict_storage_medium_check 为 False 该参数只是一个“尽力而为”的设置。即使集群内没有设置 SSD 存储介质, 也不会报 错, 而是自动存储在可用的数据目录中。 同样, 如果 SSD 介质不可访问、空间不足,都可 能导致数据初始直接存储在其他可用介质上。而数据到期迁移到 HDD 时, 如果 HDD 介质 不 可 访 问 、 空 间 不 足 , 也 可 能 迁 移 失 败 (但 是 会 不 断 尝 试 ) 。 如果 FE 参数 enable_strict_storage_medium_check 为 True 则当集群内没有设置 SSD 存储介质时,会报错 Failed to find enough host in all backends with storage medium is SSD。

3.4.4 ENGINE

本示例中, ENGINE 的类型是 olap,即默认的 ENGINE 类型。在 Doris 中,只有这个 ENGINE 类型是由 Doris 负责数据管理和存储的。其他 ENGINE 类型,如mysql 、broker、 es 等等,本质上只是对外部其他数据库或系统中的表的映射,以保证 Doris 可以读取这些数 据。而 Doris 本身并不创建、管理和存储任何非 olap ENGINE 类型的表和数据。

3.4.5 其他

IF NOT EXISTS 表示如果没有创建过该表, 则创建。注意这里只判断表名是否存在, 而不会判断新建表结构是否与已存在的表结构相同

后记

📢博客主页:https://manor.blog.csdn.net

📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

📢本文由 Maynor 原创,首发于 CSDN博客🙉

📢不能老盯着手机屏幕,要不时地抬起头,看看老板的位置⭐

📢专栏持续更新,欢迎订阅:https://blog.csdn.net/xianyu120/category_12401955.html

本文由 mdnice 多平台发布

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

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

相关文章

山区老人爱的礼物丨走进武隆区土地乡为山区老人送温暖

从车水马龙的城市到人烟稀少的乡村,穿越重峦叠嶂的高山,见到的是独属于大山的辽阔和山区老人眼中的星河。近日,传益千里为爱出发,在三棵柚公益基金会的支持下开展“山区老人爱的礼物”公益计划,走进武隆区土地乡&#…

Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取

文章目录 📕教程说明📕玩家配置 DistanceHandGrabInteractor📕物体配置 DistanceHandGrabInteractable📕调整物体飞向手部的速度📕调整探测物体的范围⭐HandFrustumNarraw⭐HandFrustumWide⭐HeadFrustum 此教程相关的…

探讨前端技术的未来:创新与适应的必要性

一、引言 2023年,IT圈似乎被一种悲观的论调所笼罩,那就是“Java 已死、前端已凉”。然而,真相是否如此呢?本文将围绕这一主题,探讨前端的现状和未来发展趋势。 二、为什么会出现“前端已死”的言论 这一言论的出现并…

盛元广通农产品质量检测实验室管理系统

盛元广通农产品质量检测实验室管理系统旨在打造智慧化市、区/镇、企业三位一体的区域安全监管体系,系统可以记录和追踪样品的来源、处理过程和结果,确保样品的安全性和可追溯性自动化检测流程,包括检测方法的设定、数据的记录和分析等&#x…

健康卤味思想引领市场新潮流,卤味市场迎来健康变革

健康卤味思想正在逐渐渗透到卤味市场中,引领着消费者对于卤味产品的选择和需求。这一变革不仅为消费者带来了更加健康、美味的卤味产品,也为卤味市场注入了新的活力。 一、健康卤味思想的兴起 随着消费者对于健康饮食的关注度不断提高,健康卤…

【node】 地址标准化 解析手机号、姓名、行政区

地址标准化 解析手机号、姓名、行政区 实现效果链接源码 实现效果 将东光县科技园南路444号马晓姐13243214321 解析为 东光县科技园南路444号 13243214321 河北省;沧州市;东光县;东光镇 马晓姐 console.log(address, phone, divisions,name);链接 API概览 源码 https://gi…

Java 基础学习(九)API概述、Object、String、正则表达式

1 API概述 1.1 API概述 1.1.1 什么是API API(Application Programming Interface),意为:应用程序接口。API就是已经写好的的程序或功能,程序要需要时可以直接调用,无需再次编写。 API可以大致分为如下几类: 编程语…

美创“四大能力”为工业企业数据安全构筑韧性防线

12月14日,“数据与网络安全创新 赋能工业企业数字化转型”主题沙龙在杭州举行。本次活动由浙江省工业软件产业技术联盟、浙江省网络空间安全创新研究中心、浙江省图灵互联网研究院主办,浙江省网络空间安全协会数据安全治理专委会、杭州市计算机学会、长三…

华硕天选大小核设置

电脑:华硕天选4, CPU:13th Gen Intel(R) Core(TM) i9-13900H 2.60 GHz在奥创智控中心(Armoury Crate)调整大小核,应用重启即可

海思平台isp之raw图回灌调试

文章目录 一、搭建环境二、配置参数三、回灌raw图isp调试中,经常会遇到一些特定场景的效果需要优化,但由于某些原因和成本考虑,开发人员无法亲临现场,这个时候采集场景raw图回灌到板端调试,就显得尤为方便了。 一、搭建环境 (1)建立板端与PQTool连接 板端进入SS928V100…

架构设计系列之架构文化建设和遵循定律

这一部分我们一起来聊聊架构文化建设部分的内容。这里是涉及到对架构师的一些软实力和文化要求的部分,会从组织文化和架构设计中常见定律两部分来逐一讲解。 当我们说到软件架构时,不仅仅是指技术上的设计和决策,更涉及到组织的文化和价值观…

带你了解OpenCV4工业缺陷检测的六种方法

文章目录 OpenCV4工业缺陷检测的六种方法机器视觉缺陷检测1. 工业上常见缺陷检测方法方法一:基于简单二值图像分析实现划痕提取,效果如下:方法二:复杂背景下的图像缺陷分析,基于频域增强的方法实现缺陷检测&#xff0c…

vscode使用remote ssh到server上 - Node进程吃满CPU

起因:Node进程吃满CPU 分析 我发现每次使用vscode的remote插件登陆到server后,就会出现node进程,不太清楚干什么用的,但是绝对和它有关。 查找原因 首先找到了这篇文章,解决了rg进程的问题: https://blo…

docker 与 ffmpeg

创建容器 docker run -it -v /mnt/f/ffmpeg:/mnt/f/ffmpeg --name ffmpeg 49a981f2b85f /bin/bash 在 Linux 上编译 FFmpeg: 安装依赖库: sudo apt-get update sudo apt-get install build-essential yasm cmake libtool libc6 libc6-dev unzip wget下…

JVM日常故障排查小结

前置知识 jstack简介 jstack是JVM自带的工具,用于追踪Java进程线程id的堆栈信息、锁信息,或者打印core file,远程调试Java堆栈信息等。 而我们常用的指令则是下面这条: # 打印对应java进程的堆栈信息 jstack [ option ] pid option常见选…

计算智能 | 粒子群算法

一、寻找非线性函数的最大值 这里我们使用python来求解《MATLAB智能算法30个案例分析》种第13章的内容。 我们使用基本粒子群算法寻找非线性函数 的最大值。 在Python程序中,我们规定粒子数为20,每个粒子的维数为2,算法迭代进化次数为300&…

一文带你了解Pytest..

在之前的文章里我们已经学习了Python自带测试框架UnitTest,但是UnitTest具有一定的局限性 这篇文章里我们来学习第三方框架pytest,它在保留了UnitTest框架语法的基础上有着更多的优化处理 下面我们将从以下角度来介绍Pytest: Pytest基本介绍…

Typora+Picgo(正常) 却上传图片失败问题解决思路和办法

报错信息 在typora中粘贴图片时报错,显示上传图片失败,有点奇怪,而我确定我的picgo正常且通过了测试,那我们就去看日志,跟踪排查问题在哪里 我的picgo日志文件路径在 D:\user\username\Application Data\picgo\picg…

Linux下Netty实现高性能UDP服务

前言 近期笔者基于Netty接收UDP报文进行业务数据统计的功能,因为Netty默认情况下处理UDP收包只能由一个线程负责,无法像TCP协议那种基于主从reactor模型实现多线程监听端口,所以笔者查阅网上资料查看是否有什么方式可以接收UDP收包的性能瓶颈…

如何实现公网访问本地内网搭建的WBO白板远程协作办公【内网穿透】

最近,我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念,而且内容风趣幽默。我觉得它对大家可能会有所帮助,所以我在此分享。点击这里跳转到网站。 文章目录 前言1. 部署WBO白板2. 本地访问WBO白板3. Linux 安装cp…