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

重构优化第三方查询接口返回大数据量的分页问题

# 问题描述
     用户线上查询其上网流量详单数据加载慢,且有时候数据没有响应全~
     1、经排除是调用第三方数据量达10w条响应会超时,数据没正常返回
     2、现有线上缓存分页也是加载慢数据不能正常展示
     3、第三方接口返回类似报文jsonj:
     
    4、我们要返回页面的报文json:
    

5、页面最终类似截图显示结果:

# 解决方案:
>    第1种方案:历史遗留问题,第三方提供的接口是一次性返回数据,没考虑到用户查询一个月的数据量会超过几万条,所以我们作为调用方也只能通过redis缓存然后前端递归分页加载所有数据展现~
> 代码示例:

       第1种方案若第三方接口返回的数据量少,线上一直正常呈现给用户数据;某天某个用户查询数据上万条返回然后问题暴露了,问题1、第三方接口超时失败(咱不通过协同系统解决问题);2、前端在递归查询缓存所有的数据加载慢用户体验非常差‘。
因为是线上问题,尽量避免前端修改最少化,只能通过后端接口来解决,通过原有业务流程及代码的解读,第三方接口最新版本也有兼容分页调用,但是没法同步分页的,其分页返回的数据达不到我们现有线上前端展示的结构要求,要按日期yyyy-MM-dd分开分组,只能重构优化;
第2种方案:

#相关工具类代码

/*** 时间数组中取最大最小日期** @param dateArray 时间日期数据:yyyy-MM-dd* @param flag 值为true 返回最大值,false返回最小值* @return 2013-11-11*/
public static String showMaxOrMinDate(String[] dateArray, boolean flag) {Map<String, Integer> dateMap = new TreeMap<>();int i, arrayLen;arrayLen = dateArray.length;for (i = 0; i < arrayLen; i++) {String dateKey = dateArray[i];if (dateMap.containsKey(dateKey)) {int value = dateMap.get(dateKey) + 1;dateMap.put(dateKey, value);} else {dateMap.put(dateKey, 1);}}Set<String> keySet = dateMap.keySet();String[] sorttedArray = new String[keySet.size()];Iterator<String> iter = keySet.iterator();int index = 0;while (iter.hasNext()) {String key = iter.next();sorttedArray[index++] = key;}int sorttedArrayLen = sorttedArray.length;String dateStr = "";if (flag) {dateStr = sorttedArray[sorttedArrayLen - 1];} else {dateStr = sorttedArray[0];}return dateStr;
}
/*** @Author dxw* @Description //TODO 获取传入日期所在年的第一天* @Date 19:19 2021/3/29* @Param* @return*/
public static Date getLastDayOfMonth(Date date) {final Calendar cal = Calendar.getInstance();cal.setTime(date);final int last = cal.getActualMaximum(Calendar.DAY_OF_MONTH);cal.set(Calendar.DAY_OF_MONTH, last);return cal.getTime();
}
/*** 日期转字符串*/
public static String date2String(Date date, String pattern) {if (date == null) {throw new IllegalArgumentException("timestamp null illegal");}pattern = (pattern == null || pattern.equals("")) ? "yyyy-MM-dd": pattern;SimpleDateFormat sdf = new SimpleDateFormat(pattern);return sdf.format(date);
}
/*** 比较两个日期的月份是否一致** @param startDate 要比较日期* @param endDate 比较日期* @return*/
public static boolean isSameMonth(String startDate, String endDate) {Date date1 = DateUtil.parse(startDate);Date date2 = DateUtil.parse(endDate);return DateUtil.isSameMonth(date1, date2);
}
/*** 获取两个时间中间的日期(天)* * @param startDate "2022-01-09"* @param endDate "2022-01-12"* @return [2022-01-09, 2022-01-10, 2022-01-11, 2022-01-12]*/
public static List<String> getBetweenDay(String startDate, String endDate) {Date start = null;// 定义起始日期Date end = null;// 定义结束日期try {start = new SimpleDateFormat("yyyy-MM-dd").parse(startDate);end = new SimpleDateFormat("yyyy-MM-dd").parse(endDate);} catch (ParseException e) {e.printStackTrace();}List<String> result = new ArrayList<>();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date date = start;Calendar cd = Calendar.getInstance();// 用Calendar 进行日期比较判断while (true) {assert date != null;assert end != null;if (!(date.getTime() <= end.getTime())) {break;}result.add(sdf.format(date));cd.setTime(date);cd.add(Calendar.DATE, 1);// 增加一天 放入集合date = cd.getTime();}return result;
}

相关文章:

重构优化第三方查询接口返回大数据量的分页问题

# 问题描述 用户线上查询其上网流量详单数据加载慢&#xff0c;且有时候数据没有响应全~ 1、经排除是调用第三方数据量达10w条响应会超时&#xff0c;数据没正常返回 2、现有线上缓存分页也是加载慢数据不能正常展示 3、第三方接口返回类似报文jsonj&#…...

Cento7 Docker安装Zabbix,定制自定义模板

1.先安装docker环境 yum -y install yum-utils device-mapper-persistent-data lvm2#导入docker安装库 yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo #按指定版本安装好docker yum install docker-ce-20.10.5 docker-ce-cli-20…...

网络防御--防火墙

拓扑 Cloud 1 作为电脑与ENSP的桥梁 防火墙配置 登录防火墙 配置IP地址及安全区域 添加地址对象 配置策略 1、内网可以访问服务器 结果 2、内网可以访问公网 结果 配置NAT策略 结果...

淘宝商品详情数据采集

淘宝商品详情数据采集的方法如下&#xff1a; 确定采集目标&#xff1a;明确要采集的商品信息&#xff0c;如商品标题、价格、销量、评论、图片等。选择采集工具&#xff1a;可以选择Scrapy框架、Java的WebMagic框架等。编写爬虫程序&#xff1a;进入目标文件夹&#xff0c;输…...

mac安装virtualenv和virtualenvwrapper

1.安装(推荐用sudo安装&#xff0c;直接pip3安装会有坑) sudo pip3 install virtualenv sudo pip3 install virtualenvwrapper 2.查看python virtualenvwrapper.sh 位置 # 查看python默认解释器 which python3 # 查看virtualenvwrapper.sh which virtualenvwrapper.sh 3.打…...

利用PCA科学确定各个指标的权重系数

背景参考: 1、提取主成分 对样本进行PCA分析,查看不同变量贡献率,确定主要的指标。我们可以通过下列代码获取需要的所有数据: import numpy as np from sklearn.decomposition import PCA# 创建一个数据 np.random.seed(0) data = np.random.random((100,5)) y = np.ra…...

代码随想录 -- day55 --392.判断子序列 、115.不同的子序列

392.判断子序列 dp[i][j] 表示以下标i-1为结尾的字符串s&#xff0c;和以下标j-1为结尾的字符串t&#xff0c;相同子序列的长度为dp[i][j]。 if (s[i - 1] t[j - 1]) t中找到了一个字符在s中也出现了if (s[i - 1] ! t[j - 1]) 相当于t要删除元素&#xff0c;继续匹配 if (s…...

mysql5升级到mysql8的血泪教训

核心问题1:下载中断这个包就会有问题&#xff0c;下载中断的话一定要重新下载 核心问题2:低版本向高版本迁移 无法整库备份 只能单库备份 1.数据备份 我这里备份了全库&#xff0c;所以后面数据没恢复回来&#xff0c;把DDL语句拆出来了单独建表 mysqldump -u root -p --al…...

Unity 开发人员转CGE(castle Game engine)城堡游戏引擎指导手册

Unity 开发人员的城堡游戏引擎概述 一、简介2. Unity相当于什么GameObject&#xff1f;3. 如何设计一个由多种资产、生物等组成的关卡&#xff1f;4. 在哪里放置特定角色的代码&#xff08;例如生物、物品&#xff09;&#xff1f;Unity 中“向 GameObject 添加 MonoBehaviour”…...

卷运维不如卷网络安全

最近发现很多从事运维的选择了辞职&#xff0c;重新规划自己的职业发展方向。运维工程师这个岗位在IT行业里面确实是处于最底层的&#xff0c;不管什么环节出现问题&#xff0c;基本都是运维背锅。背锅也就罢了&#xff0c;薪资水平也比不上别的岗位。 一般运维的薪资水平大多数…...

Digger PRO - Voxel enhanced terrains

资源链接在文末 Digger PRO​​​ 是一个简单但强大的工具,可以直接从 Unity 编辑器或游戏中创建天然洞穴和悬岩。会让你感觉自己手中握有一个体素地形,且毫无瑕疵。它实际上保持着最新、最快且可靠的 Unity 地形系统,并在你需要的地方无缝创建洞穴/悬岩峭壁网格。Digger 内…...

文字处理工具 word 2019 mac中文版改进功能

Microsoft Word 2019 是微软公司的文字处理软件&#xff0c;是 office 2019 套件中的一部分。它是一个功能强大、易于使用的工具&#xff0c;可以帮助用户创建各种类型的文档&#xff0c;包括信函、简历、报告、手册等。 Word 2019 提供了许多功能和改进&#xff0c;包括更好的…...

LeetCode 54. 螺旋矩阵

题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目解析 1、求出当前矩阵左上角的元素和右下角的元素。 2、根据这两个元素来确定我们需要遍历的具体位置。 3、当遍历完一圈的时候更新左上角元素和右下角元素。 细节&#xff1a; 当遍历最…...

每天几道Java面试题:集合(第四天)

目录 第四幕 、第一场&#xff09;大厦楼下门口第二场&#xff09;大门口 友情提醒 背面试题很枯燥&#xff0c;加入一些戏剧场景故事人物来加深记忆。PS:点击文章目录可直接跳转到文章指定位置。 第四幕 、 第一场&#xff09;大厦楼下门口 【面试者老王&#xff0c;门卫甲…...

【论文解读】Faster sorting algorithm

一、简要介绍 基本的算法&#xff0c;如排序或哈希&#xff0c;在任何一天都被使用数万亿次。随着对计算需求的增长&#xff0c;这些算法的性能变得至关重要。尽管在过去的2年中已经取得了显著的进展&#xff0c;但进一步改进这些现有的算法路线的有效性对人类科学家和计算方法…...

latexocr安装过程中遇到的问题解决办法

环境要求&#xff1a;需要Python版本3.7&#xff0c;并安装相应依赖文件 具体的详细安装步骤可见我上次写的博文&#xff1a;Mathpix替代者|科研人必备公式识别插件|latexocr安装教程 ‘latexocr‘ 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件的相关解决办…...

如何判断linux 文件(或lib)是由uclibc还是glibc编译出来的?

工作中使用的编译环境有2套编译器&#xff0c;一个是glibc&#xff0c;一个是uclibc。 有些项目使用的glibc编译的lib&#xff0c;和使用uclibc编译的工程&#xff0c;在一起就会出现reference的编译错误如下&#xff1a; 那和如何来判断一个文件是由哪个编译器编译的呢&#…...

WorkPlus | 好用、专业、安全的局域网即时通讯及协同办公平台

自国家于2022年发布的《关于加强数字政府建设的指导意见》以来&#xff0c;我国数字政府建设已经迈入了一个全新的里程碑&#xff0c;迎来了全面改革和深化升级的全新阶段。 WorkPlus作为自主可控、可信安全、专属定制的数字化平台&#xff0c;扮演着政务机关、政府单位以及各…...

ARM Linux DIY(十二)NES 游戏

文章目录 前言交叉编译工具链使能 Cnes 游戏模拟器移植游戏手柄调试 前言 很多小伙伴为了不让自己的 V3s 吃灰&#xff0c;进而将其打造成游戏机。 我们 DIY 的板子具备屏幕、扬声器、USB Host&#xff08;可以接游戏手柄&#xff09;&#xff0c;当然也要凑一凑热闹。 交叉编…...

MOEA算法的背景知识

MOEA算法 多目标进化算法优化MOEA工作原理举个例子 为什么单一策略可能会导致种群中的个体过于相似&#xff1f;种群在MOEA里面做什么&#xff1f;举例说明 多目标进化算法优化MOEA Multi-objective evolutionary algorithm optimization (MOEA) 多目标进化算法优化&#xff0…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器

一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下&#xff0c;音视频内容犹如璀璨繁星&#xff0c;点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频&#xff0c;到在线课堂中知识渊博的专家授课&#xff0c;再到影视平台上扣人心弦的高清大片&#xff0c;音…...

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南

在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...

SQL注入篇-sqlmap的配置和使用

在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap&#xff0c;但是由于很多朋友看不了解命令行格式&#xff0c;所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习&#xff0c;链接&#xff1a;https://wwhc.lanzoue.com/ifJY32ybh6vc…...