TiDB的自动分片和负载均衡,能有效解决“热点”问题吗?

正在做技术选型,研究TiDB来替换当前分库分表的方案。看文档说TiDB底层通过Region实现自动分片和负载均衡,听起来非常不错。
但有个疑问:如果我们的业务有很强的“热点”特征,比如所有操作都集中在最近一天的数据上(例如订单表、日志表),即使Region会自动分裂和调度,这些新产生的、活跃的Region不还是会落在少数几个TiKV节点上吗?

热点数据均衡依赖迁移,这个操作是后置的,先要通过监控来判断是否热点,然后才有后面的均衡调度
所以你还是要考虑从表设计上来实现更自然的均衡,比如使用随机id,确保新增数据是散列分布的

热点问题有两种解法:

  1. 规划和设计阶段
  2. 应用过程和实践阶段

两者缺一不可,否则会需要再来一个迭代和循环…

我看官方有介绍v6.0新增了热点小表缓存,这个是否可以利用起来

目前正在技术选型阶段,看看大佬们有何见解可以采纳下

可以看看这篇文章
https://docs.pingcap.com/zh/tidb/stable/troubleshoot-hot-spot-issues/#tidb-热点问题处理

谢谢,我刚刚看了,非常有用

跟分库分表一样,热点表也要id做hash

需要单独处理吗

可以对表提前设置预分片pre_split_regions,也可以数据插入前手工做打散的动作。
https://docs.pingcap.com/zh/tidb/stable/sql-statement-split-region/#pre_split_regions-示例

热点表我们尝试用,效果不算明显,用了之后,日志中会有大量写冲突的warning日志,严重影响问题排查。还没找出确切的原因和有效的解决办法

内存够大,热点数据都在内存缓存了,其实没啥问题

好的,谢谢您的建议

好的,我验证下试试