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

这篇具有很好参考价值的文章主要介绍了重构优化第三方查询接口返回大数据量的分页问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

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

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

#相关工具类代码文章来源地址https://www.toymoban.com/news/detail-709022.html

/**
 * 时间数组中取最大最小日期
 *
 * @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;
}

到了这里,关于重构优化第三方查询接口返回大数据量的分页问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java调第三方接口

    目录 背景 Spring的RestTemplate 1.引入依赖 2.RestTemplate配置类 3.RestTemplate实现类 java调第三方接口我百度的有三种方法. 第一种:通过JDK网络类Java.net.HttpURLConnection 第二种:通过Apache common封装好的HttpClient 第三种:通过Spring的RestTemplate 这个三种方法在我的scdn收藏里有,都是可以直接用的

    2024年02月05日
    浏览(58)
  • php第三方阿里云接口

    阿里云 OpenAPI 开发者门户

    2024年02月15日
    浏览(36)
  • Forest-声明式HTTP客户端框架-集成到SpringBoot实现调用第三方restful api并实现接口数据转换

    声明式HTTP客户端API框架,让Java发送HTTP/HTTPS请求不再难。它比OkHttp和HttpClient更高层, 是封装调用第三方restful api client接口的好帮手,是retrofit和feign之外另一个选择。 通过在接口上声明注解的方式配置HTTP请求接口。 官网: Forest   代码地址: forest: 声明式HTTP客户端API框架,让

    2024年02月04日
    浏览(111)
  • Java记录第三方返回类型是image/webp后端如何接收并处理

    Java 调用第三方接口返回类型是 content-type: image/webp 导入的包 第一步 首先编写好请求 String url=\\\'接口地址\\\' //第三方接口 如果是http HttpURLConnection //https请求用下面这个 HttpsURLConnection connection=null; //URL 里面放接口地址 URL uri= new URL(url(接口地址)) //如果请求是GET url+\\\"?请求参数\\\'

    2024年02月15日
    浏览(48)
  • 对接 Web Service第三方接口

    这次也是头一次接触对接第三方WebService接口,这技术都很老了,使用postman测试的时候还找了半天资料🤣。 一般来说第三方都会限制ip这些,需要注意的是,给到的接口地址是能用公网进行访问的哦。 1、拿到接口路径 http://111.111.11.1:111/services/infoWebService?wsdl 这个当然是不可

    2023年04月11日
    浏览(45)
  • 【黑马头条之内容安全第三方接口】

    本笔记内容为黑马头条项目的文本-图片内容审核接口部分 目录 一、概述 二、准备工作 三、文本内容审核接口 四、图片审核接口 五、项目集成 内容安全是识别服务,支持对图片、视频、文本、语音等对象进行多样化场景检测,有效降低内容违规风险。 目前很多平台都支持

    2024年02月15日
    浏览(61)
  • 仅仅是调用第三方接口那么简单吗?

    最近有个项目需要本地处理之后,然后调用第三方接口,本来开始觉得很简单得事情,不就是调用第三方接口吗?但是却一波三折。 首先有了下面的第一版的设计。 这个设计很简单,也是最容易想到的。主要有下面几步 1、本地处理; 2、调用第三方接口; 3、本地日志打印

    2024年02月06日
    浏览(64)
  • OpenAI 接口API的第三方代理

    OpenAI推出了针对开发者的API接口,这是供程序代码去调用的,不是面向普通人的。我们经常看到的国内版ChatGPT,就是对API接口的界面包装再出售会员。 目前,公开对外使用的是GPT-3.5模型的API接口,GPT-4模型的接口处于测试阶段,开发者需要申请权限加入等待列表,审核通过

    2024年02月07日
    浏览(43)
  • 我调用第三方接口遇到的13大坑

    在实际工作中,我们经常需要在项目中调用第三方API接口,获取数据,或者上报数据,进行数据交换和通信。 那么,调用第三方API接口会遇到哪些问题?如何解决这些问题呢? 这篇文章就跟大家一起聊聊第三方API接口的话题,希望对你会有所帮助。   一般我们在第一次对接

    2023年04月16日
    浏览(56)
  • spring中怎样优化第三方bean?

    需求:将数据库连接四要素提取到properties配置文件,spring来加载配置信息并使用这些信息来完成属性注入。第三方bean属性优化的思路如下: 1.在resources下创建一个jdbc.properties(文件的名称可以任意) 2.将数据库连接四要素配置到配置文件中 3.在Spring的配置文件中加载properties文件

    2024年02月16日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包