for循环数据量很大,很卡

kidddder
  • 553

现在有一个功能是 先去找数据库 需要抓取的数据
然后 for循环,先调用第三方的接口,然后操作一下,入库
最后for循环完了一次性提交事物
这回导致很卡,有什么办法吗

回复
阅读 1.3k
6 个回答

把循环调用接口改成一次性批处理

避免一次性提交大事务。

对方如果有批量接口,每次提交 100 条,然后更新本地 db。
对方如果没有批量接口,操纵 1 条,更新 db 一次。

第一,入库操作如果是在自己的系统;
第二,第三方接口如果是rpc接口的话.

那么系统的性能瓶颈就是上面两个,优化的方案建议是:

  1. 第三方接口提供批量查询接口
  2. 数据返回以后,在内存里循环组装数据,然后再批量入库
  3. 第三方接口加上redis缓存,可以显著提高查询速度。

1 or 2 or 3,都可以提升性能,1+2+3最优(我们生产环境上就是这样)。

最好还是使用批量接口,事务避免在长流程里。

首先,如果第三方接口不支持批量的话,可以建议支持批量,这样可以避免大量循环调第三方接口,把待处理数据分每100条(根据数据量而定)调一次第三方接口,循环次数 = 查询出来的总数据/100,然后一次提交事务,如果第三方接口批量支持的可以的话,应该没问题

如果第三方不支持批量,也是建议对数据分批处理,每100条(根据数据量而定)处理一次,包括调接口到提交事务的完整过程

批量存储,主要是和数据库交互拉低了效率

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏