正在做技术选型,研究TiDB来替换当前分库分表的方案。看文档说TiDB底层通过Region实现自动分片和负载均衡,听起来非常不错。
但有个疑问:如果我们的业务有很强的“热点”特征,比如所有操作都集中在最近一天的数据上(例如订单表、日志表),即使Region会自动分裂和调度,这些新产生的、活跃的Region不还是会落在少数几个TiKV节点上吗?
热点数据均衡依赖迁移,这个操作是后置的,先要通过监控来判断是否热点,然后才有后面的均衡调度
所以你还是要考虑从表设计上来实现更自然的均衡,比如使用随机id,确保新增数据是散列分布的
热点问题有两种解法:
- 规划和设计阶段
- 应用过程和实践阶段
两者缺一不可,否则会需要再来一个迭代和循环…
我看官方有介绍v6.0新增了热点小表缓存,这个是否可以利用起来
目前正在技术选型阶段,看看大佬们有何见解可以采纳下
谢谢,我刚刚看了,非常有用
跟分库分表一样,热点表也要id做hash
需要单独处理吗
可以对表提前设置预分片pre_split_regions,也可以数据插入前手工做打散的动作。
https://docs.pingcap.com/zh/tidb/stable/sql-statement-split-region/#pre_split_regions-示例
热点表我们尝试用,效果不算明显,用了之后,日志中会有大量写冲突的warning日志,严重影响问题排查。还没找出确切的原因和有效的解决办法
内存够大,热点数据都在内存缓存了,其实没啥问题
好的,谢谢您的建议
好的,我验证下试试