Skip to main content

数据分区

📅 2026-04-07 ✏️ 2026-04-07 CS
No related notes

1 · 数据分区(Partitioning / Sharding)#

S 数据量太大一台机器放不下,或单节点吞吐不够 C 按某种规则拆分到多台机器上后,查询、索引、节点增减都变复杂 Q 怎么拆?拆了之后怎么查、怎么扩? A 选合适的分区策略,处理好热点、再平衡和二级索引

1.1 · 分区策略

  • 按范围分区(range):key 按范围划分,支持范围查询;但可能热点不均
  • 按哈希分区(hash):key 哈希后分配,分布均匀;但丢失了范围查询能力
  • 组合:先哈希确定分区,分区内按范围排序

1.2 · 热点问题

某些 key 被大量访问(如热门用户),导致单个分区压力过大 解决:在 key 后加随机后缀分散写入,读取时合并多个分区结果

1.3 · 分区再平衡(Rebalancing)#

节点增减时,数据需要重新分配:

  • 固定数量分区:分区数远大于节点数,节点增减时只移动分区
  • 动态分区:分区大了就拆,小了就合
  • 一致性哈希:节点加入/离开时只影响相邻节点的数据

1.4 · 二级索引与分区

分区后,二级索引怎么办?

  • 本地索引(document-based):每个分区维护自己的索引;写入快,但查询需要 scatter-gather(等所有分区返回)
  • 全局索引(term-based):索引本身也分区;查询快,但写入需要跨分区更新