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

【面试问题】当前系统查询接口需要去另外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.lryc.cn/news/127652.html

相关文章:

  • Scada和lloT有什么区别?
  • Conda(Python管理工具)
  • (14)嵌套列表,Xpath路径表达式,XML增删查改,Implicit,Operator,Xml序列化,浅拷贝与深拷贝
  • 软考笔记 信息管理师 高级
  • 124、SpringMVC处理一个请求的流程是怎样的?
  • 低成本高收益,五金店小程序的秘密武器
  • C语言宏定义详解
  • SwiftUI 动画进阶:实现行星绕圆周轨道运动
  • 物理试题-空气净化器
  • Es、kibana安装教程-ES(二)
  • leetcode 917.仅仅反转字母
  • 有没有推荐的golang的练手项目?
  • springBoot的日志文件
  • Linux学习之iptables的nat表
  • 【数据结构】 ArrayList简介与实战
  • 您的网站不应该只提供一套通用 API
  • vue tree禁用和多选变为单选
  • ES6新特性。对象、数组新增方法
  • request发送http请求
  • leaflet实现MARK指向的方向随机
  • 如何使用Python编写小游戏?
  • 【Leetcode】84.柱状图中最大的矩形(Hard)
  • Arraylist集合
  • https的原理和方案
  • VTK 判断一个 点 是否在一个模型 stl 内部 vtk 点是否在内部 表面 寻找最近点
  • 【数据结构OJ题】链表的回文结构
  • Nginx常见的三个漏洞
  • 爬虫逆向实战(十六)--某建筑市场平台
  • 用Python做一个滑雪小游戏
  • EXCEL按列查找,最终返回该列所需查询序列所对应的值,VLOOKUP函数