工作中遇到的场景,这里写个例子出来,实际应用比此处更为健壮和完善
应用场景:
对一张表10万条数据(或100万或1亿+)进行更新操作或写入操作;
菜鸟是一条一条的执行吧,这显然不行啊
我在实际项目中是这样应用的, 批量更新!当然这显然是不够的 要线程批量更新才对吧!
怎么做呢?
举例1:10万条数据 ,我1000条1000条的处理 就是,10万/1000 = 100 ,
这里我就用100个线程同时处理,每个线程负责1000条数据,这里有个关键点,处理的数据不能重复!
给个代码示例吧:
线程池中线程数量可以根据 数据量/单个线程处理数量 来计算
public classDySchedule{
private static AtomicInteger line = new AtomicInteger(0);
static ExecutorService pool = Executors.newFixedThreadPool(100);
publicstaticintgetLine(){
return line.addAndGet(1000);
}
publicstaticvoiddoJob(){
for (int i = 0;i<100;i++){
Thread thread = new MyThread();
pool.execute(thread);
}
pool.shutdown();
}
publicstaticvoidmain(String[] args){
DySchedule.doJob();
}
}
以下是每个线程要执行的内容
public classMyThreadextendsThread{
@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-1
startline = 0,endline = 1000
线程:pool-1-thread-2
startline = 1000,endline = 2000
线程:pool-1-thread-5
线程:pool-1-thread-3
startline = 2000,endline = 3000
startline = 3000,endline = 4000
线程:pool-1-thread-4
startline = 4000,endline = 5000
线程:pool-1-thread-6
线程:pool-1-thread-7
startline = 6000,endline = 7000
startline = 5000,endline = 6000
线程:pool-1-thread-9
startline = 7000,endline = 8000
线程:pool-1-thread-8
startline = 8000,endline = 9000
线程:pool-1-thread-10
startline = 9000,endline = 10000
线程:pool-1-thread-12
startline = 10000,endline = 11000
线程:pool-1-thread-11
startline = 11000,endline = 12000
线程:pool-1-thread-16
startline = 12000,endline = 13000
线程:pool-1-thread-15
线程:pool-1-thread-19
startline = 14000,endline = 15000
startline = 13000,endline = 14000
线程:pool-1-thread-20
startline = 15000,endline = 16000
....
....
这里只把每个线程要处理的数据行数或分割号列举处理了,
比如以上
线程:pool-1-thread-1
startline = 0,endline = 1000 处理数据库0-1000行的数据
线程:pool-1-thread-2
startline = 1000,endline = 2000 处理1000-2000行的数据
接下来的批量任务内容是不是简单多了,不多少了,记住这里关键点就是保证数据不重复!,不遗漏!
这样子的思路几百万或者几千万级别的批量处理是没有什么问题的,
但是 你有几个亿或者几百亿的数据需要批量处理怎么办呢? 小伙子 别急,作为一名资深程序员当然还是有办法的
需要吧以上思路或方案设计成分布式,多任务,多线程的schedule 就可以了,
相关推荐
C#作为一种强大的编程语言,提供了多种策略来高效地管理大数据并优化多线程应用,以提高性能和用户体验。以下将详细介绍“C#处理大容量数据,及多线程简单应用”这一主题。 首先,当我们面临大量数据时,一个关键的...
总的来说,本项目通过Java多线程技术,结合合理的数据切分和线程池管理,实现对大数据的高效批量处理。通过分析和优化这些关键点,我们可以根据实际情况调整参数,进一步提高数据导入导出的效率。
在这个"socket大数据并行接收存数据库小例子"中,我们主要探讨的是如何利用Socket来处理大数据,并通过多线程技术提高数据处理的效率,最终将接收到的数据存储到数据库中。 首先,Socket是TCP/IP协议栈中的一个接口...
在Java编程环境中,...理解HBase的内部工作原理,结合Java的多线程技术,可以有效地利用HBase实现大数据的高效处理。在实际开发中,应根据具体场景选择合适的多线程策略,并进行充分的测试和调优,以达到最佳性能。
这个"C#大数据批量插入Access程序"的源代码会展示这些概念和技术的实际应用,为开发者提供了一个高效处理大数据的模板。通过学习和理解这个程序,你可以更好地掌握C#与数据库交互的能力,尤其是面对Access数据库时的...
Spring Batch 提供了一套完整的解决方案,涵盖了批量处理的生命周期管理,包括初始化、执行、监控和重试等环节。它遵循模块化设计,包括读取(Reader)、处理(Processor)和写入(Writer)三大核心组件,以及事务...
总结来说,Java多线程批量数据导入是一种高效处理大数据的方法。正确地设计和实施多线程策略,结合合适的并发控制和错误处理机制,能够有效提升系统的并发处理能力和性能。通过不断实践和优化,我们可以构建出更加...
本项目"Java Mybatis Maven多线程处理百万数据修改的小工具"正是为了解决这样的问题而设计的。它利用Mybatis作为持久层框架,结合Java的多线程特性,实现了对大量数据进行高效修改的功能。 Mybatis是Java领域广泛...
合理使用多线程技术可以让程序并行处理数据,进一步提高执行速度。但是要注意线程安全和同步问题,以防止竞态条件和死锁。 总之,通过虚拟内存管理、双缓冲绘图、优化文件存取以及选用适当的算法和数据结构,我们...
在多线程环境下,程序可以同时执行多个任务,从而显著提升大文件传输速度或批量文件处理的能力。 首先,我们需要理解多线程的概念。在单线程程序中,任务是按顺序执行的,而多线程则允许程序同时处理多个任务。在VC...
为了避免这种情况,可以采用批量处理的方式,一次性处理多个数据记录。在C#中,可以创建一个DataSet或DataTable来存储待插入的数据,然后一次性将这些数据提交到数据库,显著提高导入速度。 以下是一些实现这一目标...
在IT行业中,批量处理是一种非常重要的技术,尤其在大数据、自动化和系统管理等领域。这个"File-batch-processing-module.rar"压缩包显然包含了用于实现文件批量处理功能的代码或工具。让我们深入探讨一下批量处理的...
总的来说,这个“FTP.rar”压缩包提供了一个专业的数据采集解决方案,通过FV5版本的程序实现了高效的多线程处理,涵盖了数据采集、处理等多个环节,对于需要大量和快速获取网络数据的用户来说,是一个非常实用的工具...
这个过程涉及到了前端技术的多个方面,包括文件读取、数据处理、异步通信等。下面将详细阐述这些关键知识点。 首先,前端读取Excel文件是通过HTML5的File API来实现的。FileReader接口提供了读取文件的能力,用户...
"多线程socket文件传输"是一个常见的应用场景,特别是在大数据交换、文件共享等需求中。本项目使用C语言实现了一个非阻塞的多线程socket文件传输程序,尽管可能存在一些问题,但对初学者来说,它能提供宝贵的实践...
5. **处理大数据**:在大数据导出时,可以采用分批写入的方式。将数据集分割成小块,每次只写入一部分,然后释放内存。这可以通过自定义的`WriteHandler`实现。 在实际应用中,`easyExcel`不仅可以用于数据导出,还...
在Java编程中,多线程随机读取文件是一项重要的技术,尤其在处理大数据或高并发场景时。"RandomAccessFile"是Java中的一个类,它提供了对文件进行随机访问的能力,允许程序在文件的任意位置读写数据,而不仅仅是顺序...
一键表格合并助手是一款基于Python开发的高性能数据处理工具,其核心优势在于多线程快速执行能力。这种技术栈的选择不仅保证了工具的高效性,还确保了其在处理大规模数据时的稳定性和可靠性。Python作为一种灵活且...
综上所述,C#和.NET平台提供了一系列工具和策略来处理大批量数据提交到数据库的问题,包括批量操作、多线程并发、流式处理和使用ORM工具等。通过合理的设计和优化,可以有效地提高数据处理的效率和系统性能。