背景:
rest接口提供服务. 接口的逻辑是:POST服务,批量数据的传入 到本地库(根据入参的条件分别到本地15个库表中查询)查询,以前的处理逻辑为 串行执行,假设有200的参数,则打开200个DB conn. 如果中间有一条conn wait,那么 后面的查询将一直 wait.. 最终报出 read time out , 有时候返回的时间在15-30秒.. 调用方的业务量上来 影响了处理效率
UPDATE:
优化方案:
1. 减少数据库连接次数
2. 对于传入参数的验证,不合法的参数不进行DB select操作
3. 串行改并行处理。
具体实现:
1. 传入的参数中 对于同一个表的查询 进行 sql union的操作,形成一条SQL. 然后对于查询的字段 数据库增加index
2. 因为插入的参数类似人的基本信息 ,手机号跟身份证进行核验,不合法的不会进行SQL的拼装
3. 对于同一个表的查询 作为一个 Thread去并行处理。使用到的countdownlatch这个工具类.
4. countdownlatch中查询的结果都在一个ArrayList中. 线程不安全的,在结果封装的时候出现数据add错误的情况, 可以改为线程安全的list vector 。或者是使用Collections.synchronizedList 将list变成线程安全。
RESULT:
目前的响应时间在 1-2S,jmeter压测10的情况下 保持不变..