数据库批量插入
在工作中碰到了一个需求,在设备操作后,需要将操作日志上报,但是操作过程比较长,需要多次上报,原上报QPS比较高,QPS > 3000,多次上报后,QPS是原来4倍,当前存在下面问题
1、如果解决QPS高的问题
2、原流程接受客户端请求后,通过发送消息异步处理,消息量比较高
3、数据库频繁操作,高峰期风险比较大
优化方案
针对这个需求,发现逻辑非常简单,就是原来在数据库是一条记录数据,把一次插入改成一次插入和3次更新,看到这个第一想法就是批量操作
1.设备端将上报日志批量上传,一次400条(设备端自己有本地数据库),能有效将QPS降低1和2的问题;
2. 数据库操作的时候,使用批量操作
批量添加或者累加更新
<insert id="batchInsertOrUpdate" keyColumn="id" keyProperty="id" useGeneratedKeys="true">
<foreach collection="list" item="item" separator=";">
insert into xn_test
<trim prefix="(" suffix=")" suffixOverrides=",">
gmt_create,gmt_modified,
<if test="item.id != null and item.id !=''">
id,
</if>