【面試問題】當前系統查詢接口需要去另外2個系統庫中實時查詢返回結果拼接優化思路

文章目錄

  • 場景描述
  • 優化思路
  • 分享資源

場景描述

接口需要從系統1查詢數據,查出的每條數據需要從另一個系統2中再去查詢某些字段,

比如:從系統1中查出100條數據,每條數據需要去系統2中再去查詢出行數據,可能系統1一條數據對應系統2的10條數據,這樣數據量很大的情況下,這個接口很慢,如何解決

優化思路

結合業務考慮優化點: 分頁查詢批量操作異步多線程sql優化表索引等優化es整合數據放ES里… (道友們有補充的可以評論下哈)

這里的優化點:優化1:考慮:分頁查詢 + 批量查詢 優化2:開啟2個線程去查,Future.get()會造成主線程阻塞,也就是當所有future都得到結果后主線程才能繼續執行下去

示例代碼:

package com.song.controller;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;/*多線程解決:當前系統接口需要去另外2個查詢數據,并將數據拼接出來,返回前端系統數據,優化1:分頁查詢 + 批量查詢優化2:開啟2個線程去查,Future.get()會造成主線程阻塞,也就是當所有future都得到結果后主線程才能繼續執行下去*/
public class DataFetcher {public String fetchDataFromSystem1() {// 查詢系統1的數據邏輯String dataFromSystem1 = "Data from System 1";return dataFromSystem1;}public String fetchDataFromSystem2() {// 查詢系統2的數據邏輯String dataFromSystem2 = "Data from System 2";return dataFromSystem2;}public String fetchDataFromSystems() throws Exception {ExecutorService executorService = Executors.newFixedThreadPool(2);// 創建兩個線程分別用于查詢系統1和系統2的數據Future<String> future1 = executorService.submit(() -> fetchDataFromSystem1());Future<String> future2 = executorService.submit(() -> fetchDataFromSystem2());// 等待兩個線程執行完畢String dataFromSystem1 = future1.get();String dataFromSystem2 = future2.get();// 拼接數據并返回結果String combinedData = dataFromSystem1 + " | " + dataFromSystem2;return combinedData;}public static void main(String[] args) {DataFetcher dataFetcher = new DataFetcher();try {String combinedData = dataFetcher.fetchDataFromSystems();System.out.println(combinedData);} catch (Exception e) {e.printStackTrace();}}
}

分享資源

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41568.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41568.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41568.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

socks5 保障網絡安全與爬蟲需求的完美融合

Socks5代理&#xff1a;跨足網絡安全和爬蟲領域的全能選手 Socks5代理作為一種通用的網絡協議&#xff0c;為多種應用場景提供了強大的代理能力。它不僅支持TCP和UDP的數據傳輸&#xff0c;還具備更高級的安全特性&#xff0c;如用戶身份驗證和加密通信。在網絡安全中&#xf…

蘋果手機批量刪除聯系人的2個方法,請查收!

【想要清理通訊錄里的“僵尸號”&#xff0c;但是突然發現手機不能批量刪除。一個一個刪除太麻煩了&#xff0c;有什么辦法可以一次性多刪幾個人嗎&#xff1f;】 小編想問問果粉們平時都是怎么刪除聯系人的&#xff1f;特別是要刪除多個聯系人的時候&#xff0c;大家還是選擇…

matlab保存圖片

僅作為記錄&#xff0c;大佬請跳過。 文章目錄 用界面中的“另存為”用saveas 用界面中的“另存為” 即可。 參考 感謝大佬博主文章&#xff1a;傳送門 用saveas 必須在編輯器中的plot之后用saveas&#xff08;也就是不能在命令行中單獨使用——比如在編輯器中plot&#xf…

神經網絡基礎-神經網絡補充概念-46-指數加權平均的偏差修正

由來 指數加權平均&#xff08;Exponential Moving Average&#xff0c;EMA&#xff09;在初始時可能會受到偏差的影響&#xff0c;特別是在數據量較小時&#xff0c;EMA的值可能會與實際數據有較大的偏差。為了修正這種偏差&#xff0c;可以使用偏差修正方法&#xff0c;通常…

基于平臺的城市排水泵站管理系統設計

安科瑞 耿敏花 近年來我國城市內澇災害頻發&#xff0c;造成人員傷亡以及經濟損失嚴重&#xff0c;嚴重威脅著城市的安全。數據顯示&#xff0c;2015-2018年我國平均每年受淹或發生內澇城市的數量約占我國城市數量的1/5&#xff1b;人民生命財產也損失嚴重&#xff0c;據統計&a…

基于YOLOv5n/s/m不同參數量級模型開發構建茶葉嫩芽檢測識別模型,使用pruning剪枝技術來對模型進行輕量化處理,探索不同剪枝水平下模型性能影響【續】

這里主要是前一篇博文的后續內容&#xff0c;簡單回顧一下&#xff1a;本文選取了n/s/m三款不同量級的模型來依次構建訓練模型&#xff0c;所有的參數保持同樣的設置&#xff0c;之后探索在不同剪枝處理操作下的性能影響。 在上一篇博文中保持30的剪枝程度得到的效果還是比較理…

C++ 學習系列3 -- 函數壓棧與出棧

在C中&#xff0c;函數壓棧&#xff08;函數調用&#xff09;和出棧&#xff08;函數返回&#xff09;是函數調用過程中的兩個關鍵步驟。下面將逐步解釋這兩個過程&#xff1a; 一 函數壓棧與出棧過程簡介 函數壓棧&#xff08;函數調用&#xff09;的過程如下&#xff1a; …

2020年3月全國計算機等級考試真題(C語言二級)

2020年3月全國計算機等級考試真題&#xff08;C語言二級&#xff09; 第1題 有以下程序 void fun1 (char*p) { char*q; qp; while(*q!\0) { (*Q); q&#xff1b; } } main() { char a[]{"Program"},*p; p&a[3]; fun1(p); print…

【C語言學習】本地變量

本地變量 1.函數每次運行&#xff0c;就會產生一個獨立的變量空間&#xff0c;在這個空間中的變量&#xff0c;是函數的這次運行所獨有的&#xff0c;稱之為本地變量。 2.定義在函數內部的變量就是本地變量。 3.參數也是本地變量 變量的生存期和作用域 1.生存期&#xff1a;變量…

新能源電動車充電樁控制主板安全特點

新能源電動車充電樁控制主板安全特點 你是否曾經擔心過充電樁的安全問題?充電樁主板又是什么樣的呢?今天我們就來聊聊這個話題。 充電樁主板采用雙重安全防護系統&#xff0c;包括防水、防護、防塵等&#xff0c;確保充電樁安全、可靠。不僅如此&#xff0c;充電樁主板采用先…

簡單的洗牌算法

目錄 前言 問題 代碼展現及分析 poker類 game類 Text類 前言 洗牌算法為ArrayList具體使用的典例&#xff0c;可以很好的讓我們快速熟系ArrayList的用法。如果你對ArrayList還不太了解除&#xff0c;推薦先看本博主的ArrayList的詳解。 ArrayList的詳解_WHabcwu的博客-CSD…

mysql mysql 容器 忽略大小寫配置

首先能夠連接上mysql&#xff0c;然后輸入下面這個命令查看mysql是否忽略大小寫 show global variables like %lower_case%; lower_case_table_names 0&#xff1a;不忽略大小寫 lower_case_table_names 1&#xff1a;忽略大小寫 mysql安裝分為兩種&#xff08;根據自己的my…

sql server Varchar轉換為Datetime

將Varchar轉換為Datetime是一個常見的需求&#xff0c;在處理日期和時間數據時特別有用。在SQL Server中&#xff0c;可以使用CONVERT函數或CAST函數將Varchar轉換為Datetime。 使用CONVERT函數 CONVERT函數可以將一個值從一個類型轉換為另一個類型。以下是使用CONVERT函數將…

FPGA芯片IO口上下拉電阻的使用

FPGA芯片IO口上下拉電阻的使用 為什么要設置上下拉電阻一、如何設置下拉電阻二、如何設置上拉電阻為什么要設置上下拉電阻 這里以高云FPGA的GW1N-UV2QN48C6/I5來舉例,這個芯片的上電默認初始化階段,引腳是弱上來模式,且模式固定不能通過軟件的配置來改變。如下圖所示: 上…

centos 7.x 單用戶模式

最近碰到 centos 7.9 一些參數設置錯誤無法啟動系統的情況&#xff0c;研究后可以使用單用戶模式進入系統進行恢復操作。 進入啟動界面&#xff0c;按 e ro 替換為 rw init/sysroot/bin/sh 替換前 替換后 Ctrl-x 進行重啟進入單用戶模式 執行 chroot /sysroot 可以查看日…

【ARM64 常見匯編指令學習 19 -- ARM64 BEQ與B.EQ的區別】

文章目錄 ARM BEQ和B.EQ 上篇文章&#xff1a;ARM64 常見匯編指令學習 18 – ARM64 TST 指令與 條件標志位 Z ARM BEQ和B.EQ 在ARMv8匯編中&#xff0c;BEQ和B.EQ實際上是同一條指令的兩種不同表示方式&#xff0c;它們都表示條件分支指令&#xff0c;當某個條件滿足時&#x…

java練習4.快速查找

題目: 數組 arr[6,1,3,7,9,8,5,4,2],用快速排序進行升序排序. import java.util.Random;public class recursionDemo {public static void main(String[] args) {/*快速排序:* 第一輪:以0索引為基準數,確定基準數在數組正確的位置,* 比基準數小的放到左邊,比基準數大的放在右邊…

Scada和lloT有什么區別?

人們經常混淆SCADA&#xff08;監督控制和數據采集&#xff09;和IIoT&#xff08;工業物聯網&#xff09;。雖然SCADA系統已經存在多年&#xff0c;但IIoT是一種相對較新的技術&#xff0c;由于其能夠收集和分析來自各種設備的大量數據而越來越受歡迎。SCADA和IIoT都用于提高工…

leetcode原題:檢查子樹

題目&#xff1a; 檢查子樹。你有兩棵非常大的二叉樹&#xff1a;T1&#xff0c;有幾萬個節點&#xff1b;T2&#xff0c;有幾萬個節點。設計一個算法&#xff0c;判斷 T2 是否為 T1 的子樹。 如果 T1 有這么一個節點 n&#xff0c;其子樹與 T2 一模一樣&#xff0c;則 T2 為…

【學習筆記之vue】These dependencies were not found:

These dependencies were not found:方案一 全部安裝一遍 我們先淺試一個axios >> npm install axios 安裝完報錯就沒有axios了&#xff0c;驗證咱們的想法沒有問題&#xff0c;實行&#xff01; ok