雪花算法

在 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 集中来说,扫的任务变多了,会慢一些。