在 TiDB 中,为什么使用应用层生成的雪花算法(Snowflake ID)作为主键,可能会导致 INSERT 操作的性能急剧下降,甚至比使用 MySQL 时慢上数十倍?
是的,雪花算法会造成热点。但是你说的这个案例里,不是TiDB决定的,是应用层决定的吧。
应该是跨了主机了吧,特别是跨tikv
应该会造成热点,这样集中在一个TIKV比较容易堵塞等
1 个赞
讲的很有水平,高手
雪花算法会导致insert都插入到同一个region里面
1 个赞
从来产生热点region降低性能
雪花算法(Snowflake ID)是 Twitter 开源的分布式唯一 ID 生成算法,它的核心价值是解决分布式系统中,高性能、全局唯一、趋势有序 ID 的生成问题
1 个赞
为什么会到同一个region呢?
雪花生成的id通常是连续的
雪花模型的特点就是跨表读取频繁,但是事务操作肯定会慢
有没有替代方案?
用 tidb 自己的 AUTO_RANDOM https://docs.pingcap.com/zh/tidb/stable/auto-random/
或者改造 Snowflake ID — 低位放时间戳
// 传统 Snowflake(高位时间戳 → 有序写入 → 热点)
| 41-bit timestamp (高) | 10-bit worker | 12-bit seq |
// 改造版(低位时间戳 → 随机散列分布 → 无热点)
| 12-bit seq | 10-bit worker | 41-bit timestamp (低) |
只要够随机就行。
没使用过,看是高大上
感觉用auto_random就能满足需求了
这个对范围查询影响会不会很大呢,auto_random没有这么随机
感谢老师分享
感谢分享,学到了雪花算法
太随机是否会影响范围查询
会,可能会导致查询 region 过多,task 比较多,对比 region 集中来说,扫的任务变多了,会慢一些。