打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
大数据多线程高效批量处理

工作中遇到的场景,这里写个例子出来,实际应用比此处更为健壮和完善

应用场景:

对一张表10万条数据(或100万或1亿+)进行更新操作或写入操作;

菜鸟是一条一条的执行吧,这显然不行啊

我在实际项目中是这样应用的, 批量更新!当然这显然是不够的 要线程批量更新才对吧!

怎么做呢?

举例1:10万条数据 ,我1000条1000条的处理 就是,10万/1000 = 100  ,

这里我就用100个线程同时处理,每个线程负责1000条数据,这里有个关键点,处理的数据不能重复!

给个代码示例吧:

线程池中线程数量可以根据 数据量/单个线程处理数量 来计算


public class DySchedule {    private static AtomicInteger line = new AtomicInteger(0);    static ExecutorService pool = Executors.newFixedThreadPool(100);    public static int getLine(){        return line.addAndGet(1000);    }    public static void doJob(){        for (int i = 0;i<100;i++){            Thread thread = new MyThread();            pool.execute(thread);        }        pool.shutdown();    }    public static void main(String[] args) {        DySchedule.doJob();    }}



以下是每个线程要执行的内容



public class MyThread extends Thread {    @Override    public void run() {        System.out.println("线程:" + Thread.currentThread().getName());        Integer num = DySchedule.getLine();        System.out.println("startline = " +(num-1000)+",endline = " + num);    }}



程序运行结果:



线程:pool-1-thread-1startline = 0,endline = 1000线程:pool-1-thread-2startline = 1000,endline = 2000线程:pool-1-thread-5线程:pool-1-thread-3startline = 2000,endline = 3000startline = 3000,endline = 4000线程:pool-1-thread-4startline = 4000,endline = 5000线程:pool-1-thread-6线程:pool-1-thread-7startline = 6000,endline = 7000startline = 5000,endline = 6000线程:pool-1-thread-9startline = 7000,endline = 8000线程:pool-1-thread-8startline = 8000,endline = 9000线程:pool-1-thread-10startline = 9000,endline = 10000线程:pool-1-thread-12startline = 10000,endline = 11000线程:pool-1-thread-11startline = 11000,endline = 12000线程:pool-1-thread-16startline = 12000,endline = 13000线程:pool-1-thread-15线程:pool-1-thread-19startline = 14000,endline = 15000startline = 13000,endline = 14000线程:pool-1-thread-20startline = 15000,endline = 16000........



这里只把每个线程要处理的数据行数或分割号列举处理了,


比如以上

线程:pool-1-thread-1
startline = 0,endline = 1000 处理数据库0-1000行的数据

线程:pool-1-thread-2
startline = 1000,endline = 2000  处理1000-2000行的数据

接下来的批量任务内容是不是简单多了,不多少了,记住这里关键点就是保证数据不重复!,不遗漏!

这样子的思路几百万或者几千万级别的批量处理是没有什么问题的,

但是 你有几个亿或者几百亿的数据需要批量处理怎么办呢?  小伙子 别急,作为一名资深程序员当然还是有办法的

需要吧以上思路或方案设计成分布式,多任务,多线程的schedule 就可以了,

累了,点到为止吧..草草记下,不足之处可以留言

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
这么一搞,再也不怕线程打架了
转:浅析C#中异步和多线程的区别
java多线程
性能爆表:SpringBoot利用ThreadPoolTaskExecutor批量插入百万级数据实测...
C#多线程(一)
.NET基础拾遗(5)多线程开发基础(上)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服