谈一谈“汕大学术通”这个项目(大创省级二等奖)

本文讲述了作者从深度学习项目转向后端开发的过程,通过优化登录认证、数据库设计、使用Redis缓存和Kafka消息队列、以及覆盖索引等手段,显著提升了项目的性能和响应速度,最终项目获奖的关键在于细致的优化而非新功能的添加。
摘要由CSDN通过智能技术生成

其实这个项目说来也巧,这并不是我一开始就想做的。

我记得那时候刚大二,那会儿就对深度学习很感兴趣,就去了老师的实验室。刚进组,赵老师就安排了我和一个研究生师兄一起做项目。刚开始的时候我是跟着黄鑫师兄一起做的,但是后来慢慢的,我们的研究方向就开始有点不一样了。毕竟他是研究生嘛,天天泡在实验室,而我是本科生,没那么多时间去干这个,所以我很快就跟不上他的进度了。当时我就感觉发不出论文了,就跟赵老师说我不太想干了,赵老师就说问我学没学过后端。我当时说学过 SSM 框架和 SpringBoot,做过一个电商支付的项目。他说如果我不想做深度学习的内容的话,我可以换一个项目,刚好他的大创团队少了一个人,问我要不要去加入他的那个团队,做后端的,很容易拿奖,因为那个项目上一届已经有人做了,这一届就创新一下就行了。然后我就进去了。

当我去真正和团队的队员一起做项目的时候,我才真正的开始接触到 Redis,MySQL,消息队列这些。这些我以前听过,但是没有真正的仔细研究过,就了解了个皮毛。那次是我第一次接触这些名词。那个项目不出意外的拿奖了。

后来我就仔细的思考了一下拿奖的原因,发现其实拿奖的内在逻辑并不在于你做了多少新的功能,而是优化。优化就是说你把某个功能进行改进。

比如说登录功能,之前你用 session,现在你用 token,那就是改进了。那下一届的用 Spring Security,那是不是对我这个项目又做了进一步改进,对吧?又或者说你之前的数据表没有用索引,现在用了索引来加快查询速度,那是不是又是一种改进,对吧?我记得当时我都没有做新功能,就是一通改进,改进了好多东西,然后答辩的时候一直对比之前做的和我们现在做的(没有对比就没有伤害嘛),我猜是因为这个对比才让我们拿奖的。

接下来我就讲讲我这个项目是如何进行改进的吧。

1. 使用 token 实现登录认证,解决了分布式 session 的问题。同时,使用双 token 解决了单 token过期时间短的问题。

谈谈 cookie 和 session 和 token 的使用-CSDN博客

2. 使用 MySQL 作为数据库来存储文献,采用 Redis 来缓存文献,提高了文献查询速度。把接口的响应速度从 256ms 优化成 47ms,QPS 从 3.9/sec 提高到 21.3/sec。

事实上这个项目一开始并没有用到Redis,一开始是用MySQL来存储文献的,MySQL是以数据表的形式来存文献的,表的字段有:文献id,标题,作者,摘要,关键词。你要查找文献,就必须要从数据库找。但是,假如开组会的时候,导师可能会拿其中几篇文献来做讲解,那么这有可能导致这几篇文献会被频繁的访问到,那这个时候,我们就把这几篇文献放到Redis这个键值对内存数据库中,Redis用哈希这种数据类型来缓存文献,哈希的key是文献id,value是文献的其他信息。我们用jmeter做过性能测试,发现一次查询的平均响应时间从直接查询数据库的256ms到现在加了Redis后,变成了47ms。每秒的查询次数从3.9次提升到了21.3次。

3.使用 kafka 消息队列对组会汇报的文章的修改做异步处理,从而提高响应速度。引入消息队列后,系统吞吐量提高了近 8 倍,实现了每秒处理近 5000 条消息的能力。

假如不引入消息队列,那研究生想要修改一篇文章,就要等数据库对这篇修改后的文章同步完成,研究生才可以去继续修改其他文章,那这样效率太低了。但是引入了消息队列之后,只需要将修改文章的请求放到消息队列里,前端先同步修改完成,研究生就可以转头继续修改下一篇文章。等后台数据库慢慢对修改后的文章进行同步就好了。不引入消息队列,系统吞吐量太慢。引入了消息队列之后,系统吞吐量提高了近8倍,现在可以每秒处理差不多5000条消息。

4. 使用覆盖索引优化了文献信息表,成功将单次检索文献的响应速度从 692.5ms 优化到 27.8ms。

如果不适用覆盖索引,那么一般是通过文献名字找到文献id,然后通过文献id找到文献的基本信息,这个过程需要回表。事实上研究生用的最多的就是通过文献名字找到文献摘要,我们把这两个字段变成覆盖索引就可以提升查询速度了。经过用Jmeter进行性能测试,我们发现在没用覆盖索引的时候,查询响应时间是274.5ms;用了覆盖索引之后,查询响应时间是67.8ms。

  • 33
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值