当前位置: 首页 > news >正文

网站开发工具的功能包括长丰住房和建设局网站

网站开发工具的功能包括,长丰住房和建设局网站,大良营销网站建设市场,企业信息网查询系统一、背景 数据回滚 二、难点 2.1 需要处理的数据涉及多达数万个用户,每个用户涉及的表达到10个 2.2 时间紧急,需要快速回滚,数据需要完整 2.3 数据存在重复或空缺问题 三、解决方案 3.1 数据多,使用分批处理,把大任务分割成若…
一、背景

数据回滚

二、难点

2.1 需要处理的数据涉及多达数万个用户,每个用户涉及的表达到10个
2.2 时间紧急,需要快速回滚,数据需要完整
2.3 数据存在重复或空缺问题

三、解决方案

3.1 数据多,使用分批处理,把大任务分割成若干个小任务
3.2 时间紧,使用多线程CompletableFuture处理,提高处理效率
3.3 mysql数据有些是重复,需要去重,使用not exist处理,保障数据完整

四、案例代码
@Slf4j
public class DataRollBackProcessTest {// 自定义线程池ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10, 10, 600,TimeUnit.SECONDS, new ArrayBlockingQueue<>(2000));@Testpublic void startTest() throws ExecutionException, InterruptedException {List<Integer> list = new ArrayList<>();for (int i = 1; i <= 100; i++) {list.add(i);}concurrentProcess(list);}/*** * 并行处理,全部异步任务执行完才一起返回** @param list* @throws ExecutionException* @throws InterruptedException*/public void concurrentProcess(List<Integer> list) throws ExecutionException, InterruptedException {// 定义一个集合切割为小任务时每个任务的大小,int taskSize = 5;List<List<Integer>> divideList = divide(list, taskSize);// 创建一个CompletableFuture数组,用于存储异步操作的结果CompletableFuture<Void>[] futures = new CompletableFuture[divideList.size()];// 循环10次,每次执行一次异步操作for (int i = 0; i < divideList.size(); i++) {int index = i;CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {// 异步操作,可以在这里执行你的任务try {simulateLongDurationTasks(divideList.get(index));} catch (InterruptedException e) {e.printStackTrace();}System.out.println("异步操作 " + index + " 执行完成");}, threadPoolExecutor);// 将CompletableFuture对象存储到数组中futures[i] = future;}// 使用CompletableFuture.allOf等待所有异步操作完成CompletableFuture<Void> allOf = CompletableFuture.allOf(futures);// 阻塞,等待所有异步操作完成allOf.get();System.out.println("所有异步操作执行完成");}/*** 集合切分** @param origin* @param size* @param <T>* @return*/public <T> List<List<T>> divide(List<T> origin, int size) {if (origin == null || origin.size() == 0) {return Collections.emptyList();}int block = (origin.size() + size - 1) / size;return IntStream.range(0, block).boxed().map(i -> {int start = i * size;int end = Math.min(start + size, origin.size());return origin.subList(start, end);}).collect(Collectors.toList());}/*** 模拟耗时的任务* <p>* 需求背景:* 需要把一组用户的数据复制到另一组用户,生成sql脚本如下,为了简略,* 使用Thread.sleep替换耗时任务* <p>* -- 把B用户的数据插入到A用户,且A用户不存在相同的数据* sql使用点1: INSERT INTO student  from* sql使用点2: NOT EXISTS** INSERT INTO student (uid, STATUS, age, sex) SELECT* 61442, -- A用户* STATUS,* age,* sex* FROM* student t1* WHERE* t1.uid = 682801 -- B用户* AND t1. STATUS = 1* AND NOT EXISTS (* SELECT* t2.id* FROM* student t2* WHERE* t2.uid = 61442* AND t2.age = t1.age* AND t2.sex = t1.sex* );*/public void simulateLongDurationTasks(List<Integer> subList) throws InterruptedException {if (subList == null || subList.size() == 0) {return;}int sleepSeconds = subList.stream().mapToInt(e -> e).reduce(0, Integer::sum);log.info("thread id:{}, thread name:{}, thread states:{}, Thread.activeCount:{}, thread sleep:{}",Thread.currentThread().getId(),Thread.currentThread().getName(),Thread.currentThread().getState(),Thread.activeCount(),sleepSeconds);Thread.sleep(sleepSeconds);}
}
五、总结

使用分批处理,结合多线程,提高处理效率
多线程处理需要考虑系统资源竞争问题、顺序问题

http://www.yayakq.cn/news/375109/

相关文章:

  • 必应搜索网站虚拟主机管理
  • 忘记wordpress的账号和密码深圳网站建设公司推荐乐云seo
  • 做网站及小程序需要会哪些技能合肥建设网站公司
  • 创建平台网站下载软件建设部网站 专业评估
  • 建站一条龙网站建设和建议
  • .net做网站的优缺点学而思编程网站
  • 重庆最大的本地交流网站网站建设与管理模拟试卷
  • 专业做财务公司网站页面设计升级访问紧急通知
  • 微信网站什么做的wordpress 全部头像无法显示
  • 做网站签订合同怎样建个自己的网站
  • 网站系统建设招标文件外贸soho
  • 网站无障碍建设湘潭网站建设 r磐石网络
  • 网站的建设内容网站建设-丹东
  • iapp如何用网站做软件长沙公司有哪些
  • 门户网站创新的方式有邯郸百度网络服务中心
  • 玉树网站建设wordpress 网站图标设置方法
  • wordpress分类页副标题seo查询在线
  • 网站可行性分析网站com域名上不去cn能
  • 买了空间和域名 就有网站后台了吗沪佳家装和沪尚茗居哪个好
  • 网站动效是代码做的吗广东佛山网络科技有限公司
  • php网站好吗wordpress从入门
  • 自媒体专用网站免费南昌网站seo外包服务
  • 免费空间网站房产网查询备案
  • 最棒的网站建设wordpress在线邮箱
  • 东营区住房和城乡建设局网站wordpress分类页获取分类名称
  • 企业网站开发douyanet做it软件的网站
  • 深圳网站设计收费标准广州网站建设排名
  • 北京网站建设怎么样天横栏网站建设
  • 凡科建站做的网站收录慢吗网站管理 上传模板
  • 网站与网页区别是什么意思自动发广告的软件