HDFS Block 和 Doris Tablet 都是"把大数据切成小块",但切的逻辑完全不同。
一句话区别
HDFS Block 是"按斤切肉",不管肉是谁的,每块固定 128MB;
Doris Tablet 是"按户分粮",按家庭(分区)和人数(分桶)来分,一块就是一个完整的"小表"。
HDFS Block:按文件大小硬切
怎么切的?
你有一个 1GB 的文件,HDFS 说:"我不管这文件是什么内容,每 128MB 切一刀"。
1GB 文件 → 切成 8 块,每块 128MB Block-1: 文件的前 128MB(可能是 0~100万行) Block-2: 文件的 128MB~256MB(可能是 100万~200万行) ...
特点:
-
块大小固定(默认 128MB 或 256MB)
-
块里没有业务含义,只是物理上的"一段字节"
-
块里没有索引,查询时要扫描整个块
形象比喻:印刷厂切纸
出版社印了一本书,印刷厂不管章节内容,每 100 页切一刀:
-
第一刀:第 1~100 页
-
第二刀:第 101~200 页
-
第三刀:第 201~300 页
问题:你要查"第三章在讲什么",可能第三章正好跨在第 100 页和第 101 页之间,你得把两块都拿来看。
Doris Tablet:按业务逻辑分
怎么切的?
Doris 说:"我不按文件大小切,我按数据逻辑切"。
比如你的订单表有 10 亿条数据,按时间分区 (每天一个分区)+ 哈希分桶(按 user_id 取模分 16 桶):
2024-01-01 的数据 → 分成 16 个 Tablet Tablet-1: user_id 模16=0 的订单 Tablet-2: user_id 模16=1 的订单 ... Tablet-16: user_id 模16=15 的订单 2024-01-02 的数据 → 再分成 16 个 Tablet ...
特点:
-
每块 Tablet 是一个完整的、独立的小表,有自己的 schema、索引、统计信息
-
大小不固定,通常几百 MB 到 1GB
-
查询时可以精准定位:"查 user_id=123 的数据?直接去 Tablet-11,别的 Tablet 不用看"
形象比喻:图书馆按主题分书架
图书馆有 100 万本书,不是按"每 100 本一堆"随便堆,而是:
-
按楼层 分:1 楼文学、2 楼科技、3 楼历史(这就是分区)
-
按书架 分:科技楼里,A 架计算机、B 架生物、C 架物理(这就是分桶)
-
你要找《Java 编程》,直接去 2 楼 A 架,别的书架根本不用看。
核心差异对比
|-----------|------------------|---------------------|
| | HDFS Block | Doris Tablet |
| 切法 | 按文件大小硬切(128MB/块) | 按业务逻辑切(分区+分桶) |
| 里面是什么 | 一段无意义的字节 | 一个带索引、带统计的"小表" |
| 查询时 | 可能扫整个文件,不知道数据在哪 | 精准定位到某个 Tablet,别的跳过 |
| 副本 | 存 3 份同样的字节块 | 存多份,每份都能独立参与计算 |
| 适合 | 纯存储大文件(日志、视频、备份) | 实时分析(带条件的查询、聚合) |
为什么这个区别很重要?
HDFS Block 的问题
假设你要查:"2024 年 1 月 1 日,用户 123 的订单金额"。
HDFS 里:
-
数据存在某个 128MB 的 Block 里
-
但 HDFS 不知道"用户 123"在哪,甚至不知道哪些 Block 里有 2024-01-01 的数据
-
只能把相关文件的所有 Block 都读一遍,全表扫描
Doris Tablet 的优势
Doris 里:
-
先找分区:2024-01-01 的数据只在某些 Tablet 里 → 跳过其他 364 天的数据
-
再找分桶:user_id=123 只落在某个特定 Tablet 里 → 跳过其他 15 个桶
-
最后在这个 Tablet 里用索引快速定位到具体行
可能从 10 亿条数据里,只读了几千条就找到结果。
一句话记忆版
HDFS Block 是"物理切块",只知道"这是文件的第几段";Doris Tablet 是"逻辑分片",自带索引和边界,知道"这里存的是哪天的、哪个用户的数据"。
前者是存储系统 的分块方式,后者是数据库的分片方式 >> 目的不同,设计自然不同。