码迷,mamicode.com
首页 > 数据库 > 详细

同一套代码部署多个实例来并行完成mysql某项任务,且避免重复执行

时间:2021-06-04 19:29:47      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:并行执行   并行   分页   感知   mys   启动   表数据   计算   不同   

我经常会碰到一些耗时较长的任务,譬如更新5千万条表数据中的某个字段,代码中可以通过分页依次读取db,然后更新即可。但是耗时极长,那么能否通过将代码部署多个实例,譬如启动多个docker来并行执行任务,横向扩展,这样就能大幅减少耗时。

但是问题在于代码是相同的,假如采用的是分页读取,依次更新,那么不管启动多少个实例,执行的都是重复任务,达不到并行的目的。

那么怎么完成动态扩展后,就能分担任务,而不是执行重复的事呢?

我思考了两种实现方式

第一种:要实现随时增删实例,然后还能不重复的完成5千万条数据的更新,最优的方式是借助于消息队列(MQ),如kafka、阿里MNS等,将这5千万数据的id全部放入MQ消息队列中,然后在代码里消费mq即可,这样不管启动多少个实例,都是不会执行重复任务的,而且可以动态删减实例数量。

第二种:借助于zookeeper临时节点的功能,可以动态感知到节点下所有的临时节点,如果有实例掉线,也可以通知到其他实例做相应的调整。根据当前的节点数量,来给每个节点路由不同的数据集,譬如有5个节点,那么自己就只处理id%5=自己节点号的数据。当有新增或删除临时节点时,就重新计算自己该处理的数据。
————————————————
版权声明:本文为CSDN博主「天涯泪小武」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tianyaleixiaowu/article/details/78981345

同一套代码部署多个实例来并行完成mysql某项任务,且避免重复执行

标签:并行执行   并行   分页   感知   mys   启动   表数据   计算   不同   

原文地址:https://www.cnblogs.com/lixiaochong/p/14849046.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!