如何正确批量处理业务?

前端批量勾选100个单据到后端处理。目前是通过foreach循环一个一个的处理,但经常听到这不算是批量处理,其实也是单个处理。

单据处理前,需要做很多判断是否符合条件。

在响应中,需要返回哪个单据成功,或哪个单据失败并带上原因。

那么,请问大家,怎么做才算靠近或真正的批量处理呢?

目前有这样做:100个ID,分5组,每次读20个ID的相关数据,依次验证,依次处理,相对减少SQL查询。


回答:

减少数据库查询次数是正确的优化思路,毕竟io操作耗时较高。但是如果一次性查询的id太多也可能导致索引失效,查询速度变慢。

建议多线程分批处理,比如查询5000个id,开10个线程,每个线程查询处理500个id


回答:

首先得清楚批处理到底是什么?

1、客户端展示给用户看的多个勾选,勾选后后台处理叫批处理?
2、客户端多个勾选,到后端多个进程/线程去处理任务?

从你描述上面看 你仅仅只是取数据做了分批处理,任务还是同步执行的,也就是这执行完毕,才会执行下一个任务,可以尝试开启多个进程或者线程加快任务的处理。


回答:

减少sql查询就行了,批量去查询,用户觉得你是批处理的就行呀,没有性能问题管那么多干嘛,100个你就是for处理也是很快的,就怕里面还套了好多sql查询。
真的要并行处理那就是多线程搞了。


回答:

抛开业务场景,去讨论所谓的正确的批处理都是没意义的。

比如Spark叫批处理,Flink叫流处理。Spark就是每隔固定的间隔去取批量的数据处理,Flink是来一个数据就处理一个数据。

按你目前的业务逻辑,每条都需要进行处理一次,这没有问题。如果你想加快处理速度的话,可以使用线程池,将任务拆分,处理后再合并结果。


本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。


回答:

广义来说,批处理这个概念针对的是在线处理(即马上获得结果),它指的是在安排的时间点自动处理一些业务数据,推进这些业务的流程。而业务数据相互之间具有天然的独立性,它们的处理本质上就是单个处理的,比如说我每天处理一批订单,那么一个订单处理失败,就不应该导致这一天所有的订单都处理不了。所以并不存在所谓“真正的批处理”概念,一切都要合乎业务需要,做最简单又有效的设计。

以上是 如何正确批量处理业务? 的全部内容, 来源链接: utcz.com/p/945078.html

回到顶部