业务有一张mysql表,会有一个spark任务定时从该表中读取数据到ods层,
我们有一张业务的mysql表,这张表唯一的主键id
是稀疏不连续的,id已经自增到300亿了,但是表中实际只有3000w条数据。
如果按id来读数据,会遇到两个问题:
1. 按照id的数量来分区,会有数据倾斜问题。比如每个分区读10w个id,可能有些分区里这10w个id全是空的数据。
2. 如果我们按照实际数量来分区,可能会遇到每个分区id跨度太大,mysql慢查询压力大的问题。比如每个分区10w条数据,有些分区的10w条数据,最大的id和最小的id相差可能有上千万
如果用 limit offset来读数据,会遇到一个问题:
1. mysql执行offset的时候,会做全表扫描,把offset的数据加载到内存和磁盘里,直到找到需要的数据。这样对mysql的压力可能更大。
转载请注明来源,欢迎指出错误或表达不够清晰之处。可以在评论区留言,也可以邮件至 hellozhugj@gmail.com