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

免费空间访客100个网站嘉兴市建设教育网站

免费空间访客100个网站,嘉兴市建设教育网站,东乡族网站建设,gzip wordpress一、背景 数据回滚 二、难点 2.1 需要处理的数据涉及多达数万个用户#xff0c;每个用户涉及的表达到10个 2.2 时间紧急#xff0c;需要快速回滚,数据需要完整 2.3 数据存在重复或空缺问题 三、解决方案 3.1 数据多#xff0c;使用分批处理#xff0c;把大任务分割成若…一、背景 数据回滚 二、难点 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 {ListInteger list new ArrayList();for (int i 1; i 100; i) {list.add(i);}concurrentProcess(list);}/*** * 并行处理全部异步任务执行完才一起返回** param list* throws ExecutionException* throws InterruptedException*/public void concurrentProcess(ListInteger list) throws ExecutionException, InterruptedException {// 定义一个集合切割为小任务时每个任务的大小int taskSize 5;ListListInteger divideList divide(list, taskSize);// 创建一个CompletableFuture数组用于存储异步操作的结果CompletableFutureVoid[] futures new CompletableFuture[divideList.size()];// 循环10次每次执行一次异步操作for (int i 0; i divideList.size(); i) {int index i;CompletableFutureVoid future CompletableFuture.runAsync(() - {// 异步操作可以在这里执行你的任务try {simulateLongDurationTasks(divideList.get(index));} catch (InterruptedException e) {e.printStackTrace();}System.out.println(异步操作 index 执行完成);}, threadPoolExecutor);// 将CompletableFuture对象存储到数组中futures[i] future;}// 使用CompletableFuture.allOf等待所有异步操作完成CompletableFutureVoid allOf CompletableFuture.allOf(futures);// 阻塞等待所有异步操作完成allOf.get();System.out.println(所有异步操作执行完成);}/*** 集合切分** param origin* param size* param T* return*/public T ListListT divide(ListT 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(ListInteger 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.hkea.cn/news/14531855/

相关文章:

  • 江苏建设厅施工员证报名网站北京监理建设协会网站
  • 网站开发客户提供素材抵押网站建设方案
  • 山东专业网站seo收录网站的平台有哪些
  • 建立一个公司的网站wordpress文章表格
  • 网站添加手机站许昌企业网站建设
  • 网站开发必须要要掌握的语言wordpress侧边栏插件
  • 商业中心 网站建设百度推广人联系方式
  • 政务系统网站建设南阳网站seo推广公司
  • 中国建设银行官网站基金查询购物咨询主题WordPress
  • 信创网站网站图片 优化
  • 深圳网站建设联雅网络组织建设包括哪些内容
  • 万网网站开发盐都建设局网站
  • 如何购买一个网站的域名青岛教育平台网站建设
  • 杭州优化公司在线留言最新seo网站优化教程
  • 商城网站建设功能点价格百度权重10的网站
  • 网站建设交流qq网站建设捌金手指专业7
  • 榆林网站建设公司电话免费外贸网站在线
  • 网站彩票做号网站的网页声明怎么做
  • 无锡市城市建设规划局网站合肥做网站联系方式
  • 网站被模仿怎么办网站服务类型
  • 亚马逊跨境电商开店流程巩义网站优化
  • 网站建设 坚持实用原则网站推广的渠道有
  • 电影采集网站怎么做seo网站建设的步骤有哪些
  • 在线建设网站制作做招聘网站的背景图片
  • 我想做一个网站怎么办企业做网站收入
  • 免版权图片网站pc网站建设怎么做
  • 网站建设建材域名网站这么做
  • 网站建设对企业带来什么作用什么是二级网站推广
  • wordpress搭建的网站源代码
  • 浦口国家建设部网站wordpress 分词插件