在 HBase / Cassandra / ClickHouse(MergeTree 系列)等支持“列族 / 宽表”模型的系统中,列族(Column Family)怎么划分,核心目标只有一个:让读写模式、数据生命周期和访问频率匹配存储与缓存机制,避免无效 IO 和热点。
下面从设计原则 → 常见误区 → 实战示例三个层面讲。
经常一起读写的字段放一个列族,冷数据单独拆
✅ 好处:
高频写 & 低频写分开
❌ 混在一起会导致:
TTL 不同的字段不要放一个列族
例如:
否则:
列族不是“字段容器”,是“IO 单元”
反例:
user_info (100+ 列)
正例:
user_base
user_behavior
user_ext
一般经验值:
❌ 按“业务模块”硬拆
order
payment
user
→ 一次查询跨 3 个列族,性能灾难
❌ 按“字段类型”拆
string_family
int_family
→ 毫无意义
❌ 一个字段一个列族
→ Region 管理爆炸
RowKey: user_id + day
列族1: info(热)
- name
- status
- last_active_time
列族2: metric(中)
- pv
- click
- duration
列族3: log(冷)
- raw_event
- debug_info
info + metriclog列族 = 访问模式 + 生命周期 + IO 单元
如果你用的是:
可以告诉我具体场景,我可以直接帮你画一张列族设计图。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。