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

后端性能优化的一些总结

目录

1、背景

2、优化实现

2.1查询数据表速度慢

2.2调别人接口速度慢

2.3导入速度慢、

2.4导出速度慢的做出介绍

2.5统计功能速度慢

3、总结


1、背景

系统上线后,被用户反应系统很多功能响应时长很慢。用户页面影响速度有要求,下面针对查询数据表速度慢、调别人接口速度慢、导入速度慢、导出速度慢、统计功能速度慢的优化进行介绍


2、优化实现

2.1查询数据表速度慢

     有个业务,当时开发的时候,预估数据量是20W左右,结果上线之后,因为用户多次DDL操作数据库对数据全量进行逻辑删除以及数据有版本信息,导致数据达到百万级别。 每次查询的时候不带条件耗时至少5秒。

  针对以上情况进行的措施如下:

1、后端创建一个定人清理垃圾数据的任务,每天晚上对用户DDL操作数据表进行逻辑删除的数据,进行物理删除。这可以控制数据表数据量,数据量可控制到50w以内,不会无限膨胀。

2、给这张大表加索引,经常使用的查询条件加索引

3、因为涉及到多版本数据。对数据表进行分别,最新版本数据存一张表,所有版本数据存历史表。列表查询查最新版本数据就行,这个数据量控制在10w

4、针对这张表的操作,不管是查询还是删除都批量进行

做了以上优化,查询时长控制到2秒内

2.2调别人接口速度慢

目录树,是懒加载,查一次要调2次外部接口,第一次查1级目录,第二次查2级目录。调一次接口耗时2秒,2次耗时4秒,加上数据统计3秒,加载目录树耗时7秒。

针对这种情况优化如下:

1、后端做个定时任务,每30分钟主动调第三方接口查一级目录、二级目录数据,放入redis缓存,页面查询几乎都是命中缓存。2次接口控制到1.5秒

2、统计数量的sql,加缓存,缓存30分钟。如果有数据新增,删除等操作主动删除更新缓存。

做了以上2步,加载控制在3秒内

2.3导入速度慢

用户一次导入10w条数据,分22个sheet页,每次导入要花2个小时

针对这种情况优化如下:

1、多线程读取sheet页的数据,对数据进行批量校验

2、凡是涉及到操作数据表读写的地方,尽可能的改成批量读写

3、如果校验中用到的一些调第三方接口的有用信息,在校验阶段就把这些信息保存,不重复调第三方接口

做了以上3步,导入控制在30分钟内

2.4导出速度慢的做出介绍

用户一次导出10w条数据,居然花了半小时

针对这种情况优化如下:

1、查询数据库的时候,批量一次查10w,而不是循环查询10w次

2、10w条数据,有一个是要拿目录id,查询目录名称,居然循环了10w次。把第一步数据目录id进行去重,批量调第三方接口查目录信息

做了以上2步,导入控制在1分钟内

2.5统计功能速度慢

系统首页,有各种图标的统计功能。有些统计数据有查几张大表数据,接口时长可达10几秒

针对这种情况优化如下:

1、创建定时任务,每天晚上跑出统计数据到统计表。实现数据T-1的展示。如果时效性要求高,也可半小时或者10分钟统计一次

按以上方案,接口都控制在2秒内

3、总结

加速性能一般考虑:

1、缓存预热。 定时任务,每半小时刷缓存,接口只查缓存数据

2、数据表加索引

3、定时清理垃圾数据

4、定时任务预先生成数据,牺牲实时性

5、引入多线程

6、操作数据库表要尽快批量处理,特别是大数据的导入导出

7、打印耗时日志

StopWatch sw = new StopWatch();
sw.start("importGzTemplate开始导入规则模板");
sw.stop();
sw.start("importGzTemplate校验1");
sw.stop();
​​​​​​​sw.start("importGzTemplate写入数据表");
​​​​​​​sw.stop();
log.info(sw.prettyPrint());

相关文章:

后端性能优化的一些总结

目录 1、背景 2、优化实现 2.1查询数据表速度慢 2.2调别人接口速度慢 2.3导入速度慢、 2.4导出速度慢的做出介绍 2.5统计功能速度慢 3、总结 1、背景 系统上线后,被用户反应系统很多功能响应时长很慢。用户页面影响速度有要求,下面针对查询数据表…...

【升级openssl1.1.1t报错libssl.so.1.1: cannot open shared object file】

升级openssl报错: openssl vesion openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory 编译安装openssl1.1.1t当执行openssl version的时候,报上述错误,将编译到的…...

CVE-2024-0352 likeshop v2.5.7文件上传漏洞分析

本次的漏洞研究基于thinkPHP开发开的一款项目..... 漏洞描述 Likeshop是Likeshop开源的一个社交商务策略的完整解决方案,开源免费版基于thinkPHP开发。Likeshop 2.5.7.20210311及之前版本存在代码问题漏洞,该漏洞源于文件server/application/api/contr…...

JAVA处理类似饼状图占比和100%问题,采用最大余额法

前言: 在做数据统计报表的时候,有两种方式解决占比总和达不到100%或者超过100%问题。 第一种方式是前端echart图自带的算分框架。 第二种方式是java后端取处理这个问题。 现存问题: 前端不通过饼状图的方式去展示各个分类的占比累加和为100%问…...

MATLAB矩阵的操作(第一部分)

矩阵的基本知识 矩阵概念 矩阵(Matrix)在数学中是一个由复数或实数组成的矩形阵列,其元素按照行和列排列。矩阵的定义可以形式化地描述为: 一个 m 行 n 列的矩阵是一个有序的数表,其中包含 m*n 个数,可以…...

全面掌握Django的web框架Django Rest_Framework(一)

文章目录 Django Rest_Framework1. DRF介绍2.DRF特点3.环境安装与配置(1)DRF需要以下依赖(2)创建django项目 4.序列化器的使用(1)创建序列化器 5. 反序列化器使用 Django Rest_Framework 1. DRF介绍 Djan…...

AOP+Redisson 延时队列,实现缓存延时双删策略

一、缓存延时双删 关于缓存和数据库中的数据保持一致有很多种方案,但不管是单独在修改数据库之前,还是之后去删除缓存都会有一定的风险导致数据不一致。而延迟双删是一种相对简单并且收益比较高的实现最终一致性的方式,即在删除缓存之后&…...

Hive中left join 中的where 和 on的区别

目录 一、知识点 二、测试验证 三、引申 一、知识点 left join中关于where和on条件的知识点: 多表left join 是会生成一张临时表。on后面: 一般是对left join 的右表进行条件过滤,会返回左表中的所有行,而右表中没有匹配上的数…...

LaTeX教程(001)-LaTeX文档结构(01)

LaTeX教程(001)- LaTeX \LaTeX LATE​X文档结构(01) 说在前面 这是我本人学习《The LaTeX Companion》第三版的笔记,但并不是翻译。 书籍的第一章对 LaTeX \LaTeX LATE​X及其历史进行了相当长的介绍,这是几乎每一本关于 LaTeX \LaTeX LATE​X的书都会…...

SV-7041T 多媒体教学广播IP网络有源音箱

SV-7041T是深圳锐科达电子有限公司的一款2.0声道壁挂式网络有源音箱,具有10/100M以太网接口,可将网络音源通过自带的功放和喇叭输出播放,可达到功率30W。同时它可以外接一个30W的无源副音箱,用在面积较大的场所。5寸进口全频低音喇…...

Linux文本三剑客awk经典案例

前言: AWK是一种专门用于文本处理的编程语言,它被广泛用于数据提取和报告生成,也是企业笔试面试常考的内容,以下34题是awk的用法案例,希望可以帮到你! 1.查看TCP连接状态 [rootnode1 ~]# netstat -nat | a…...

如何使用 Mermaid、GitHub 和 VSCode 用代码创建关系图三

Mermaid 系列 如何使用 Mermaid、GitHub 和 VSCode 用代码创建关系图一如何使用 Mermaid、GitHub 和 VSCode 用代码创建关系图二 1.如何创建甘特图 Gantt 甘特图以条形图的形式用作可视化表示。它有效地展示了项目的时间表,揭示了各个项目组件完成所需的持续时间…...

考研经验总结——政治篇

文章目录 一、前言二、学习情况三、最后 一、前言 不要提前,不要提前,不要提前, 我曾在暑假的时候上了7天左右的政治课,讲真话是很有趣的,并且对于自身的世界观、人生观和价值观的改善也是相当不错的,把我…...

春招秋招,在线测评到底难不难?

现在很多企业在春招的时候,都会有一个在线测评的环节,目的当然就是希望更加了解清楚毕业生的综合能力以及其他方面的素质,好让HR可以根据岗位筛选出能力达标的人才。所以,现在不少即将面对春招的大学毕业生,比较关心的…...

数学建模比赛中,使用大语言模型如chatgpt、文心一言该如何写Prompt(提示)?

在大型语言模型中,"prompt"(中文常译为“提示”或“引导”)是指提供给模型的输入文本,用于指示或引导模型产生特定的输出。它的作用主要是告诉模型用户想要得到什么样的信息或完成什么样的任务。 例如,在使…...

tcpdump 抓包无法落盘

文章目录 问题背景解决办法 问题背景 在嵌入式设备中(Linux系统),为了分析两个网络节点的通讯问题,往往需要用到tcpdump,抓一个.pcap的包在PC端进行分析。博主在实际操作中发现,抓包无法实时落盘。 解决办法 # 下面的命令是写在…...

【网站项目】066农家乐信息平台

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…...

idea/webstorm 创建Vue实例 Unresolved type Vue 处理方法

1.电脑本地安装node.js 官网下载 2. 其他: 未排除变量,前期试错(以下步骤配置了,但不确定对解决问题是否有帮助)...

C++ 11新特性之语法甜点2

概述 C 11中引入了许多简化编程工作的语法上的新特性,我们暂且美其名曰:“语法甜点”。书接上篇,我们继续介绍C 11中的这些“语法甜点”,也是第二篇关于“语法甜点”的文章。 语法甜点6:模板右边双括号 在C 03中&#…...

【芯片设计- RTL 数字逻辑设计入门 番外篇 8.1 -- memory repair 详细介绍】

文章目录 memory repair 详细介绍Memory Repair 方法Memory Repair 过程举例memory repair 详细介绍 SoC (System on Chip) 的 Memory Repair 是一种技术,用于检测和修复内存中的损坏单元。由于SoC内部集成了大量的逻辑和存储单元,包括RAM(随机访问存储器)、ROM(只读存储…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...