for循环数据量很大,很卡

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

阅读 569
评论
    6 个回答
    • 11.6k

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

      避免一次性提交大事务。

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

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

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

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

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

          • 298

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

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

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

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

                撰写回答

                登录后参与交流、获取后续更新提醒

                相似问题
                推荐文章