Java高并发项目优化指南

本文介绍了数据库优化的关键步骤,包括在PostgreSQL中创建索引以提升查询速度,如何避免索引失效,以及分析索引使用情况。同时,讨论了缓存层的数据选择和更新策略,强调了应用层的优化措施,如减少数据库调用和使用异步任务。此外,还提到了服务器的网络带宽管理和系统平均负载的监控,以及性能测试的重要性。
摘要由CSDN通过智能技术生成

持久层

  • 注:持久层数据库以postgresql为例

使用索引

  • 索引主要是对于查询业务比较有帮助,根据业务逻辑对要查询的某个字段或多个字段加索引,可以极大提升查询速度,几十倍到几百倍

创建索引

  • postgresql创建组合索引的语法如下:
create index index_name on table_name(field_name1, field_name2, ···);
  • 如:
create index teacher_id_type_deletion_flag on assess(teacher_id, type, deletion_flag);

避免索引失效

分析索引使用情况

  • 就拿上文创建的索引来说,语法如下:
explain ANALYZE select * from assess where teacher_id = 680 and type = 1 and deletion_flag = 0;

查看索引

  • \di 查看当前数据库所有索引
  • select * from pg_stat_all_indexes; 查看索引使用情况、状态(好像也是当前数据库)在这里插入图片描述
    字段解释:
  • relid oid 索引的表的OID
  • indexrelid oid 索引的OID
  • schemaname name 索引中模式名
  • relname name 索引的表名
  • indexrelname name 索引名
  • idx_scan bigint 索引上开始的索引扫描数
  • idx_tup_read bigint 通过索引上扫描返回的索引项数
  • idx_tup_fetch bigint 通过使用索引的简单索引扫描抓取的活表行数

删除索引

  • drop index index_name 如果有scheme可能还要用drop index scheme_name.index_name

缓存层

什么数据放缓存

  • 不经常改变的数据
  • 数据变化非常快,且接口的查询速度稍慢(几秒钟),但正好实时性要求不是特别高

缓存更新策略

  • 以下的策略与上文放入缓存的数据一一对应:
    • 在数据变化时更新
    • 可以几分钟更新一次,接口的查询速度在几秒钟左右最适合这种策略(如果超过5s,其实用户体验就很不好了,业务逻辑不能再优化的情况下,那只能放缓存了

应用层

  • 应用层要尽量减少调用数据库,不要在多层嵌套for循环的最内层请求数据库
  • 对象的声明放在循环外面
  • 尽量降低代码的时间复杂度
  • 对于一些特殊的情况,可以使用异步任务

限流策略

参考:

服务器

网络带宽

  • 事先预估带宽峰值

系统平均负载

其他策略

  • 关闭一些无关紧要的服务,释放更多资源供当前服务使用,一个Java服务可能会占据几百MB内存甚至更多
  • 生产环境中,日志级别升为Info
  • 物理删除数据库中已经被逻辑删除的数据,即deletion_flag = 1的数据

性能测试

参考:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值