国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

重構(gòu)優(yōu)化第三方查詢接口返回大數(shù)據(jù)量的分頁問題

這篇具有很好參考價值的文章主要介紹了重構(gòu)優(yōu)化第三方查詢接口返回大數(shù)據(jù)量的分頁問題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

# 問題描述
? ? ?用戶線上查詢其上網(wǎng)流量詳單數(shù)據(jù)加載慢,且有時候數(shù)據(jù)沒有響應全~
? ? ?1、經(jīng)排除是調(diào)用第三方數(shù)據(jù)量達10w條響應會超時,數(shù)據(jù)沒正常返回
? ? ?2、現(xiàn)有線上緩存分頁也是加載慢數(shù)據(jù)不能正常展示
? ? ?3、第三方接口返回類似報文jsonj:
? ? ?重構(gòu)優(yōu)化第三方查詢接口返回大數(shù)據(jù)量的分頁問題,java,重構(gòu)
? ? 4、我們要返回頁面的報文json:
? ??重構(gòu)優(yōu)化第三方查詢接口返回大數(shù)據(jù)量的分頁問題,java,重構(gòu)

5、頁面最終類似截圖顯示結(jié)果:

重構(gòu)優(yōu)化第三方查詢接口返回大數(shù)據(jù)量的分頁問題,java,重構(gòu)

# 解決方案:
>? ? 第1種方案:歷史遺留問題,第三方提供的接口是一次性返回數(shù)據(jù),沒考慮到用戶查詢一個月的數(shù)據(jù)量會超過幾萬條,所以我們作為調(diào)用方也只能通過redis緩存然后前端遞歸分頁加載所有數(shù)據(jù)展現(xiàn)~
> 代碼示例:
重構(gòu)優(yōu)化第三方查詢接口返回大數(shù)據(jù)量的分頁問題,java,重構(gòu)
? ? ? ?第1種方案若第三方接口返回的數(shù)據(jù)量少,線上一直正常呈現(xiàn)給用戶數(shù)據(jù);某天某個用戶查詢數(shù)據(jù)上萬條返回然后問題暴露了,問題1、第三方接口超時失?。ㄔ鄄煌ㄟ^協(xié)同系統(tǒng)解決問題);2、前端在遞歸查詢緩存所有的數(shù)據(jù)加載慢用戶體驗非常差‘。
因為是線上問題,盡量避免前端修改最少化,只能通過后端接口來解決,通過原有業(yè)務流程及代碼的解讀,第三方接口最新版本也有兼容分頁調(diào)用,但是沒法同步分頁的,其分頁返回的數(shù)據(jù)達不到我們現(xiàn)有線上前端展示的結(jié)構(gòu)要求,要按日期yyyy-MM-dd分開分組,只能重構(gòu)優(yōu)化;
第2種方案:

重構(gòu)優(yōu)化第三方查詢接口返回大數(shù)據(jù)量的分頁問題,java,重構(gòu)

#相關(guān)工具類代碼文章來源地址http://www.zghlxwxcb.cn/news/detail-709022.html

/**
 * 時間數(shù)組中取最大最小日期
 *
 * @param dateArray 時間日期數(shù)據(jù):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();
}
/**
 * 日期轉(zhuǎn)字符串
 */
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;// 定義結(jié)束日期
    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;
}

到了這里,關(guān)于重構(gòu)優(yōu)化第三方查詢接口返回大數(shù)據(jù)量的分頁問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • java調(diào)第三方接口

    目錄 背景 Spring的RestTemplate 1.引入依賴 2.RestTemplate配置類 3.RestTemplate實現(xiàn)類 java調(diào)第三方接口我百度的有三種方法. 第一種:通過JDK網(wǎng)絡類Java.net.HttpURLConnection 第二種:通過Apache common封裝好的HttpClient 第三種:通過Spring的RestTemplate 這個三種方法在我的scdn收藏里有,都是可以直接用的

    2024年02月05日
    瀏覽(33)
  • php第三方阿里云接口

    阿里云 OpenAPI 開發(fā)者門戶

    2024年02月15日
    瀏覽(21)
  • Forest-聲明式HTTP客戶端框架-集成到SpringBoot實現(xiàn)調(diào)用第三方restful api并實現(xiàn)接口數(shù)據(jù)轉(zhuǎn)換

    Forest-聲明式HTTP客戶端框架-集成到SpringBoot實現(xiàn)調(diào)用第三方restful api并實現(xiàn)接口數(shù)據(jù)轉(zhuǎn)換

    聲明式HTTP客戶端API框架,讓Java發(fā)送HTTP/HTTPS請求不再難。它比OkHttp和HttpClient更高層, 是封裝調(diào)用第三方restful api client接口的好幫手,是retrofit和feign之外另一個選擇。 通過在接口上聲明注解的方式配置HTTP請求接口。 官網(wǎng): Forest ? 代碼地址: forest: 聲明式HTTP客戶端API框架,讓

    2024年02月04日
    瀏覽(24)
  • Java記錄第三方返回類型是image/webp后端如何接收并處理

    Java記錄第三方返回類型是image/webp后端如何接收并處理

    Java 調(diào)用第三方接口返回類型是 content-type: image/webp 導入的包 第一步 首先編寫好請求 String url=\\\'接口地址\\\' //第三方接口 如果是http HttpURLConnection //https請求用下面這個 HttpsURLConnection connection=null; //URL 里面放接口地址 URL uri= new URL(url(接口地址)) //如果請求是GET url+\\\"?請求參數(shù)\\\'

    2024年02月15日
    瀏覽(21)
  • 【黑馬頭條之內(nèi)容安全第三方接口】

    【黑馬頭條之內(nèi)容安全第三方接口】

    本筆記內(nèi)容為黑馬頭條項目的文本-圖片內(nèi)容審核接口部分 目錄 一、概述 二、準備工作 三、文本內(nèi)容審核接口 四、圖片審核接口 五、項目集成 內(nèi)容安全是識別服務,支持對圖片、視頻、文本、語音等對象進行多樣化場景檢測,有效降低內(nèi)容違規(guī)風險。 目前很多平臺都支持

    2024年02月15日
    瀏覽(24)
  • 對接 Web Service第三方接口

    對接 Web Service第三方接口

    這次也是頭一次接觸對接第三方WebService接口,這技術(shù)都很老了,使用postman測試的時候還找了半天資料??。 一般來說第三方都會限制ip這些,需要注意的是,給到的接口地址是能用公網(wǎng)進行訪問的哦。 1、拿到接口路徑 http://111.111.11.1:111/services/infoWebService?wsdl 這個當然是不可

    2023年04月11日
    瀏覽(19)
  • OpenAI 接口API的第三方代理

    OpenAI推出了針對開發(fā)者的API接口,這是供程序代碼去調(diào)用的,不是面向普通人的。我們經(jīng)??吹降膰鴥?nèi)版ChatGPT,就是對API接口的界面包裝再出售會員。 目前,公開對外使用的是GPT-3.5模型的API接口,GPT-4模型的接口處于測試階段,開發(fā)者需要申請權(quán)限加入等待列表,審核通過

    2024年02月07日
    瀏覽(19)
  • 僅僅是調(diào)用第三方接口那么簡單嗎?

    僅僅是調(diào)用第三方接口那么簡單嗎?

    最近有個項目需要本地處理之后,然后調(diào)用第三方接口,本來開始覺得很簡單得事情,不就是調(diào)用第三方接口嗎?但是卻一波三折。 首先有了下面的第一版的設(shè)計。 這個設(shè)計很簡單,也是最容易想到的。主要有下面幾步 1、本地處理; 2、調(diào)用第三方接口; 3、本地日志打印

    2024年02月06日
    瀏覽(24)
  • 我調(diào)用第三方接口遇到的13大坑

    我調(diào)用第三方接口遇到的13大坑

    在實際工作中,我們經(jīng)常需要在項目中調(diào)用第三方API接口,獲取數(shù)據(jù),或者上報數(shù)據(jù),進行數(shù)據(jù)交換和通信。 那么,調(diào)用第三方API接口會遇到哪些問題?如何解決這些問題呢? 這篇文章就跟大家一起聊聊第三方API接口的話題,希望對你會有所幫助。 ? 一般我們在第一次對接

    2023年04月16日
    瀏覽(24)
  • spring中怎樣優(yōu)化第三方bean?

    需求:將數(shù)據(jù)庫連接四要素提取到properties配置文件,spring來加載配置信息并使用這些信息來完成屬性注入。第三方bean屬性優(yōu)化的思路如下: 1.在resources下創(chuàng)建一個jdbc.properties(文件的名稱可以任意) 2.將數(shù)據(jù)庫連接四要素配置到配置文件中 3.在Spring的配置文件中加載properties文件

    2024年02月16日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包