在数据库(尤其是分布式数据库 / 缓存系统)中,“哈希算法如何扩容”是一个经典问题。核心矛盾是:扩容(增加节点)时,如何尽量少地迁移数据,同时保持系统可用。
下面按常见方案由浅入深说明。
最朴素的做法:
节点编号 = hash(key) % N
当 N 从 3 → 4:
❌ 不适合动态扩容
1 / N✅ 大大减少迁移
slot = hash(key) % 16384
node = slot → node 映射表
✅ 扩容可控
✅ 迁移粒度清晰
双倍扩容
元数据集中管理
在线迁移
| 方案 | 扩容成本 | 分布均匀性 | 复杂度 |
|---|---|---|---|
| 取模哈希 | 高 | 好 | 低 |
| 一致性哈希 | 低 | 一般 | 中 |
| 虚拟节点 | 低 | 好 | 中 |
| Hash Slot | 可控 | 好 | 中高 |
如果你指的是某一种数据库(MySQL / Redis / PostgreSQL / MongoDB / TiDB 等),我可以给你具体扩容方案和示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。