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

石家庄网站开发报价揭阳百度seo公司

石家庄网站开发报价,揭阳百度seo公司,中国最大的网站建设公司,自己建设的网站靠谱吗一、背景 数据回滚 二、难点 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.dt0577.cn/news/27189.html

相关文章:

  • 陇南市建设局网站百度指数可以查询多长时间的
  • 建网站公司是如何赚钱网络舆情的网站
  • 2021年十大购物网站排名市场推广怎么写
  • 强企网做网站网络销售都是诈骗公司吗
  • 58同城泰安二手房出售信息百度网站的优化方案
  • 东莞网站优化排名系统管理培训课程
  • 建设通网站登录不进去百度关键词查询工具免费
  • 网站建设手机端官网seo短视频网页入口营销
  • wordpress怎么私人媒体库seo还有未来吗
  • 广州专业网站制作平台哪里有免费的网站推广
  • 广州建企业网站有免费推广平台
  • 手机网站微信网站开发短视频推广策略
  • 制作自己的网站教程好用的网站推荐
  • 中学生做的网站有哪些佛山网站建设
  • 广州市网页设计制作贵州seo技术培训
  • 武夷山网站设计搜索引擎推广
  • 商业网站建设定位新媒体运营是做什么
  • 郑州做网站的大公司有哪些百度网盘人工客服电话多少
  • 新加坡政府网站建设的特点seo关键字怎么优化
  • 网站建设实训教程深圳竞价托管
  • 天津高端网站建设广告营销平台
  • 网站404怎么做的nba西部最新排名
  • 有没有免费的直播视频下载优化大师网页版
  • 个人介绍网站怎么做下载一个百度导航
  • 房产中介做网站域名注册需要哪些条件
  • 做一个公司网站多少钱重庆seo培训
  • 北京做网站公司电话陕西seo关键词优化外包
  • 济南网站建设服务商全网自媒体平台
  • 做网站软件的互联网广告代理加盟
  • 服装工厂做网站的好处百度关键词推广多少钱