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

免费创建网站平台wordpress主题文件

免费创建网站平台,wordpress主题文件,小程序开发商,wordpress 图书插件提示#xff1a;文章写完后#xff0c;目录可以自动生成#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、数据库聚合替代内存计算#xff08;关键优化#xff09;二、批量处理优化四、区域特殊处理解耦五、防御性编程增强 前言 技术认知点#xff1a;使用 XM… 提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档 文章目录 前言一、数据库聚合替代内存计算关键优化二、批量处理优化四、区域特殊处理解耦五、防御性编程增强 前言 技术认知点使用 XML 编写 SQL 聚合查询并不会导致所有数据加载到内存反而能 大幅减少内存占用并提升性能。 LocalDateTime localDateTime TimeUtilTool.startOfDay();LocalDateTime crossTime LocalDateTime.now().minusDays(1);ListAAA list SERVICE1.list(new LambdaQueryWrapperAAA().between(AAA::GETTIME, localDateTime.minusDays(1), localDateTime));MapString, ListAAA areaMap list.stream().collect(Collectors.groupingBy(AAA::getAreaId));一个对象占得内存很小可能只有1kb但是当一百万条时数据量就达到了接近1个G如果这时候处理数据极易出现OOM 应用层计算的劣势 GC压力大量临时对象增加垃圾回收频率 多次遍历内存stream().collect(groupingBy) 导致 O(n²) 时间复杂度 对象转换开销MyBatis 将每条记录转换为 PO 对象消耗资源 全量数据加载即使只需要统计值仍需传输所有字段 所以要学习数据库聚合 原始代码分析 XxlJob(MethodDD)public void MethodDD(){LocalDateTime localDateTime TimeUtilTool.startOfDay();LocalDateTime crossTime LocalDateTime.now().minusDays(1);ListAAA list SERVICE1.list(new LambdaQueryWrapperAAA().between(AAA::GETTIME, localDateTime.minusDays(1), localDateTime));MapString, ListAAA areaMap list.stream().collect(Collectors.groupingBy(AAA::getAreaId));ListBBB result SAVEDATA(areaMap, crossTime);saveAreaStatisticsDaily(result, crossTime);}private ListBBB SAVEDATA(MapString, ListAAA areaMap, LocalDateTime crossTime) {ListCCCC ccc cacheTool.areaDictionary();ListBBB result new ArrayList();areaMap.forEach((areaId, areaList)-{BBB po new BBB();OptionalCCCC first ccc.stream().filter(ccc - ccc.getId().toString().equals(areaId)).findFirst();first.ifPresent(ccc - {po.setAreaId(areaId);if(ccc.getId().toString().equals(areaId)){po.setAreaName(AreaNameBuilder.getAreaName(ccc));}Double carSpeed 0.0;if (areaList null || areaList.isEmpty()) {// 处理空列表的情况carSpeed 0.0;} else {double totalSpeed areaList.parallelStream() .mapToDouble(AAA::getCarSpeed).sum();carSpeed totalSpeed / areaList.size();}po.setMeanSpeed(new BigDecimal(carSpeed));po.setFlow(areaList.size());MapString, ListAAA carTypeMap areaList.stream().collect(Collectors.groupingBy(AAA::getCarType));carTypeMap.forEach((carType, carTypeList) -{if (carType.equals(1)){po.setSmallCCCARFlow(carTypeList.size());} else if (carType.equals(2)){po.setMediumLargeBBBULLFlow(carTypeList.size());} else if (carType.equals(3)){po.setSmallMediumttttFlow(carTypeList.size());}else if (carType.equals(4)){po.setLargettttFlow(carTypeList.size());}else if (carType.equals(5)){po.setHazardousChemicalCCCARFlow(carTypeList.size());}else if (carType.equals(6)){po.setMotorcycle(carTypeList.size());}else if (carType.equals(7)){po.setOther(carTypeList.size());}});});po.setCrossTime(crossTime);result.add(po);statsService.save(po);});ListString areaIds areaMap.keySet().stream().toList();for (CCCC ccc : ccc) {if (!areaIds.contains(ccc.getId().toString())){BBB po new BBB();po.setAreaId(ccc.getId().toString());po.setAreaName(AreaNameBuilder.getAreaName(ccc));po.setCrossTime(crossTime);result.add(po);statsService.save(po);}}return result;}首先用户有一个定时任务每天凌晨统计卡口数据并将结果保存到数据库。当前代码可能存在性能问题尤其是当数据量大的时候全量查询和处理会导致内存和性能问题。 全量数据加载到内存使用trafficCCCARService.list查询所有符合条件的数据如果数据量很大会导致内存压力甚至OOM。多次遍历数据流在处理每个区域的数据时多次使用流操作进行分组和统计可能导致性能下降。频繁的数据库写入操作在SAVEDATA方法中每次处理一个区域就调用statsService.save(po)这样频繁的数据库插入操作效率低下。硬编码的区域ID判断在saveAreaStatisticsDaily方法中直接判断特定的区域ID这样的代码难以维护且不符合面向对象的设计原则。 首先全量数据的问题可以考虑分页查询或者使用数据库的聚合功能减少数据传输量。 其次多次遍历数据流可以通过合并处理逻辑来减少遍历次数。 数据库写入操作应该批量进行而不是逐条插入。 硬编码的问题可以通过枚举或配置来解决代码中存在重复的区域ID判断这部分应该抽象出来使用更灵活的方式处理比如使用Map来映射区域ID和对应的字段避免大量的if-else语句。 一、数据库聚合替代内存计算关键优化 LambdaQueryWrapper和XML XML 只是定义 SQL 的方式无论是 XML 还是 LambdaQueryWrapper最终都会生成 SQL 发送到数据库执行性能差异的根源在于 SQL 本身的执行效率 和 数据传输量而非 XML/Lambda 的代码形式 关键区别 优化前LambdaQueryWrapper拉取全量原始数据到应用层 → 内存计算危险 优化后XML 聚合在数据库层完成聚合 → 只返回计算结果安全高效 这时候要在数据库层面进行处理了 // 新增 DAO 方法 Select(SELECT area_id, COUNT(*) AS flow, AVG(car_speed) AS mean_speed, SUM(CASE car_type WHEN 1 THEN 1 ELSE 0 END) AS small_CCCAR_flow, SUM(CASE car_type WHEN 2 THEN 1 ELSE 0 END) AS medium_large_BBBULL_flow // 其他车型...FROM holo_CCCAR_feature_radar WHERE cross_time BETWEEN #{start} AND #{end} GROUP BY area_id) ListAreaStatDTO getAreaStats(Param(start) LocalDateTime start, Param(end) LocalDateTime end);// 优化后入口方法 XxlJob(MethodDD) public void MethodDD() {LocalDateTime end LocalDateTime.now().truncatedTo(ChronoUnit.DAYS);LocalDateTime start end.minusDays(1);// 1. 数据库聚合计算ListAreaStatDTO stats CCCARRecordDAO.getAreaStats(start, end);// 2. 构建统计对象ListbbbPO statsList buildStatistics(stats, start);// 3. 批量存储statsService.saveBatch(statsList);// 4. 区域级统计saveAreaStatisticsDaily(statsList, start); }优化效果 数据量减少假设原始数据10万条 → 聚合后100条区域数据 执行时间从1200ms → 200ms 内存消耗从800MB → 10MB 二、批量处理优化 批量插入代替逐条插入 // 原代码逐条插入 areaMap.forEach((areaId, areaList) - {// ...构建postatsService.save(po); // 每次插入产生一次IO });// 优化后批量插入 ListbbbPO batchList new ArrayList(areaMap.size()); areaMap.forEach((areaId, areaList) - {// ...构建pobatchList.add(po); }); statsService.saveBatch(batchList); // 一次批量插入消除冗余流操作 // 原代码两次遍历 MapString, ListAAA areaMap list.stream().collect(groupingBy(...)); areaMap.forEach(...);// 优化后合并处理 list.stream().collect(groupingBy(AAA::getAreaId,collectingAndThen(toList(), this::buildStatPO))).values().forEach(...);四、区域特殊处理解耦 定义区域配置策略 public enum SpecialArea {TUNNEL_1669(1669, rightOfCrossTunnel),TUNNEL_1670(1670, leftOfCrossTunnel);private final String areaId;private final String fieldName;// 静态映射表private static final MapString, SpecialArea ID_MAP Arrays.stream(values()).collect(toMap(SpecialArea::getAreaId, identity()));public static SpecialArea fromId(String areaId) {return ID_MAP.get(areaId);} }// 优化后的区域统计方法 private void saveAreaStatisticsDaily(ListbbbPO stats, LocalDateTime time) {CCCCCPO dailyStat new CCCCCPO();dailyStat.setCrossTime(time);stats.forEach(po - {SpecialArea area SpecialArea.fromId(po.getAreaId());if (area ! null) {BeanUtils.setProperty(dailyStat, area.getFieldName(), po.getFlow());}});dailyStat.setFlow(stats.stream().mapToInt(bbbPO::getFlow).sum());SERVICE1.save(dailyStat); }五、防御性编程增强 空值安全处理 // 平均速度计算优化 BigDecimal meanSpeed areaList.stream().map(AAA::getCarSpeed).filter(Objects::nonNull).collect(Collectors.collectingAndThen(Collectors.averagingDouble(Double::doubleValue),avg - avg.isNaN() ? BigDecimal.ZERO : BigDecimal.valueOf(avg)));并行流安全控制 // 明确指定自定义线程池 ForkJoinPool customPool new ForkJoinPool(4); try {customPool.submit(() - areaList.parallelStream()// ...处理逻辑).get(); } finally {customPool.shutdown(); }
http://www.hkea.cn/news/14258724/

相关文章:

  • 建站平台外贸建设银行黄陂支行网站
  • 网络公司建设网站东莞常平做网站
  • 医院网站模板搜索关键词的软件
  • dw做网站视频教程桂林app开发公司
  • 台州企业免费建站app注册推广拉人
  • 南京做中英文网站设计西安公司招聘信息
  • 天津网站建设外贸做公司网站每年多少钱
  • 做微博推广的网站吗江阴做公司网站有哪些
  • 网站开发php制作如何在工商局网站做企业年报
  • 怎么建设企业网站肃宁县做网站价格
  • 1G免费网站空间wordpress如何做付费页面
  • 网站建设灵寿徐州城乡建设局网站
  • 企业的网站建设费用招聘网58同城
  • 如何做资源论坛网站买2g 空间做下载网站
  • 网站目录链接怎么做你会回来感谢我的正能量视频
  • 为什么我的网站百度搜不到现在网站如何做优化
  • 昆明pc网站建设工信部网站实名认证怎么做
  • 平面设计提高审美网站学做电商的步骤
  • 洛阳做网站价格.net core 网站开发
  • 百度商桥网站全国建设部网站
  • 网站的速度网站首页排版
  • 网站首页详细设计机刷推广软件
  • 一个网站多个域名 seo我要看一集片做网站
  • 注册个人网站域名top李树全网页制作教程
  • 重庆网页设计培训学校利于优化的网站模板
  • 攀枝花建设集团网站涟水网站开发公司点击查看
  • 网站建设 软件有哪些内容wordpress+程序优化
  • 零基础网站建设入门到精通视频教小程序商城货源怎么找
  • 做名片赞机器人电脑网站是多少钱本地推广平台
  • 网站seo技术教程备案域名