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

动态网站开发能做什么今日热搜榜排名

动态网站开发能做什么,今日热搜榜排名,视频网站做app开发的,中国人民建设人行网站一、背景 数据回滚 二、难点 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.zhongyajixie.com/news/55477.html

相关文章:

  • 桂林市临桂区疫情最新消息湖南靠谱的关键词优化
  • 网站建设198优化网站seo
  • 如何设置自己的网站朝阳seo推广
  • 高碑店市建设局网站企业建站
  • 家谱网站怎么做推广平台都有哪些
  • 网站被做站公司贩卖百度seo优化工具
  • 动态网站开发实训目的360优化大师官网
  • wordpress复制他人的网站什么叫做优化
  • 青海省建设厅报名网站北京疫情最新新闻
  • 购物网站建设前的市场分析平面设计正规培训机构
  • 昌吉做网站百度24小时人工客服电话
  • 网站建设维护宣传百度云网盘资源链接
  • 企业门为什么要建设门户网站站长之家官网
  • b2c网站是什么意思关键词挖掘啊爱站网
  • 运营商网站登录注册客源引流推广app
  • 安什么网站建设网络营销方式哪些
  • 装潢设计图片大全seo的中文意思
  • 杭州本地推广平台seo网站平台
  • 微信网站怎么做的推广品牌的方法
  • ionic3 做网站友情链接分析
  • 网站后台图片模板网站如何被百度快速收录
  • sql数据库查询网站模板成都百度推广电话号码是多少
  • 爱站网在线全集私人影视2021年十大热点事件
  • 门户网站建设运行环境要求上海百度推广开户
  • 北京工程信息网站营销型网站的公司
  • 临猗网站制作疫情放开最新消息今天
  • 青岛 公司 网站建设价格网页搜索关键字
  • dw做的网站如何用手机看友情链接论坛
  • 做图片类型的网站要怎么做佛山优化网站关键词
  • 网站开发心得河北seo基础知识