mysql 千万和上亿数据如何跑脚本刷新

通常大家在讲mysql 单表不要存储大数据量,但是实际工作中经常接触mysql表存储千万、上亿的数据。

如果有需求对这张表做修改。

一种方案使用pt-online-schema-change 这种。

还有一种如果业务相对独立的话,可以对这张表做抽离,这时候就需要跑脚本。

比如有1000万数据,通常的做法就是对这一千万数据做切片,比如1-100,101-200 ,多个进程依次处理。

那实际处理过程中就是这样,

```

创建一张表,每次更新下一次起始值next_start。

查询的时候就是id>next_start  这里不能用offset limit。mysql 底层是b+ 树结构,叶子节点是双向链表,支持范围查询,where 条件可以直接命中索引,查询效率会比较高。

创建执行进度表,记录当前脚本执行的开始值,以及执行到那个位置的ID。(start_id,end_id)这个是用来查看脚本执行到那个位置。


假如进程1执行过程中,定时任务2又开始启动了,这时候任务2就会从next_start 处继续执行接下来的脚本。

这时候对任务1也没有任何影响,这样就实现了多进程执行脚本。


这时候需要注意的就是对多进程的限制,可以根据当前脚本执行进度表来判断执行任务的进程数量来判断。


基于这些就可以实现对千万数据和上亿数据的脚本刷新。

```





评论

(= ̄ω ̄=)··· 暂无内容!

回复

邮箱