在数据库(尤其是分布式数据库、缓存系统)中,用哈希算法来分桶(分片 / 分区) 是非常常见的做法。下面从原理到常见方式给你系统讲一下。
数据库桶就是:
把数据按某种规则分散到多个存储单元(节点 / 表 / 文件)中
目的:
核心公式:
bucket_id = hash(key) % N
key:分片键(如 user_id、order_id)hash():哈希函数(如 MD5、SHA、MurmurHash)N:桶的总数(节点数 / 分区数)示例:
user_id = 1001
hash(1001) = 932847
N = 8
bucket = 932847 % 8 = 7
→ 数据放入第 7 号桶
最直接:
bucket = hash(key) % N
✅ 优点:
❌ 缺点:
解决扩容问题,常用于:
原理:
✅ 优点:
❌ 缺点:
一致性哈希的改进版:
一个物理节点 = 多个虚拟节点
效果:
例如:
db = year % 2
table = hash(user_id) % 64
适合:
以 MySQL 为例:
分库:db_0 ~ db_7
分表:t_user_0 ~ t_user_15
db_index = user_id % 8
table_index = hash(user_id) % 16
好的 key:
❌ 避免使用:
哈希不是万能:
解决:
如果你愿意,我可以:
你更想看哪一种?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。