apache服务器的重复提交问题

最近在做一个大数据的处理,从数据库中批量的查询出约10w条数据,对每一条数据进行处理后再save到另一张表里。暴露出几个问题总结一下:


1.apache服务器的超时重发。由于我们后端首先进的是apache服务器,通过mod_jk转发至应用服务器的。apache的workers.properties配置文件中有一个属性

#worker.localnode.socket_timeout=60
#worker.localnode.retries=1

其中socket_timeout配置是表示后端处理超时的时间,
    retries
mod_jk向后端jboss重发的次数,retries=1标识不重发,期末线上没有配置默认为2.
如果后端代码处理时间超过1分钟,mod_jk会再次请求,相当于你的方法执行了2次。


可能带来的问题:

  • 后台耗时的定时任务被执行2
  • 数据订正时出现诡异的问题。
  • 生成、导出excelzip时,出现java.net.SocketException: Broken pipe这些诡异的问题
2. 大批量的数据循环插入可能导致数据库失去响应,取决于机器的配置。可能的解决方案:在循环中每隔n次插入Thread.sleep(200)。

3.可能的话,使用batchSave而不是save操作(前提是框架支持,如hibernate)。

4.在对大量数据进行处理尤其是生产环境的情况下,出于安全的考虑,一定要做好以下三点:
  • 任何情况下要做好应急回滚方案,如果这次不能回滚,那会造成更大的影响。
  • 在线下要尽可能的模拟线上情况,应该把数据全部导下来订正一遍,看是否会出现问题。
  • 对线上订正时,程序订正必须要做足够的log记录,记录出错的、成功的记录。事后补救可以定位。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值