跑批设计-如何才能让跑批更加高速

跑批的应用场景

在开发过程中跑批经常使用的地方:

  1. 消息类:到期失效以及到期批量通知客户
  2. 计算类:在财务中的罚息、计提、计息
  3. 文件类:对账信息、还款信息同步以及报表生成

跑批数据特点

  1. 数据量非常大
  2. 实时性并不是特别高,有比较宽裕的时间处理问题
  3. 性能要求并不是特别高,要求在

跑批中的隐患

数据量非常大,有时会全部读写到内存开销较大

批量循环更新数据库

一整个事务贯穿始终

多个节点操作时,设计的缺点导致只会命中一个节点操作数据,导致其他节点资源浪费

优化思考

数据量比较大的思路:

1.数据分片处理:最简单实用的方法是实用分页limit

limit在分页的情况下,注意如果数据量非常大的情况差limit效率非常低

limit 的偏移量越大,执行时间越长。limit a, b会查询前a+b条数据,然后丢弃前a条数据,select * 会查询所有的列,会有回表操作,其中a条回表操作时无效的

针对上面的问题,我们需要的操作时尽量减少无效的回表策略,limit a,b,直接获取a+1到a+b条数据的id,再根据这些id查询数据这样就减少了回表的操

另一种有缺陷的搜索:

当然还有一种有缺陷的方法是基于排序做条件过滤。

比如像上面的示例 user 表,我要使用 limit 分页得到1000001到1000010条数据,可以这样写 SQL:

select * from user where sex = 1 and id > (select id from user where sex = 1 limit 1000000, 1) limit 10;

这种操作需要id必须有序,如果无序这种操作将没有任何意义,适用面比较小

2.分片数据的高效实用

单机:利用线程池执行不同的分片数据

集群:将数据分布到不同的节点处理数据

1.基于xxl-job路由策略,分片路由策略,可以实现不同的分片数据分不到不同的节点执行,xxl-job基于的是静态分片

@Component
public class Demo2Handler {
 
 
    @XxlJob(value = "demo3Job")
    public ReturnT<String> demo3JobHandler(String param) throws Exception{
        // 分片参数
        ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
        // 业务逻辑
        for (int i = 0; i < shardingVO.getTotal(); i++) {
            if (i == shardingVO.getIndex()) {
                System.out.println("demo3");
                XxlJobLogger.log("第 {} 片, 命中分片开始处理", i);
            } else {
                XxlJobLogger.log("第 {} 片, 忽略", i);
            }
        }
        return ReturnT.SUCCESS;
    }
}

2.SchedulerX 2.0与PowerJob基于MapReduce动态分片,PowerJob以及Schedulerx2.0分布式计算原理&最佳实践

数据批量更新操作

尽可能将所有的结果汇总进行批量的更新或者插入的操作

insert into table_name(column1,column2,column3) values ('column11','column12','column13'),('column21','column22','column23')···

update table_name set column_name = 'column1'  where column_name2 = 'column2';update table_name set column_name = 'column3' where column_name2 = 'column4';···

文件操作

跑批对账以及还款情况同步设计文件的读写操作

文件的读操作

还款情况同步这种数据天然就是有顺序以及行号,进行数据分片可以天然的利用行号进行数据的分配工作,可以使用可以使用Java IO提供的RandomAccessFile类来进行文件的解析

文件写操作

可以让服务批量生成一些小的文件,单独调用文件服务将这些小文件进行合并操作

 

回复 8888可以领取面试资料一枚

MySQL limit分页大偏移量慢的原因及优化方案

Schedulerx2.0分布式计算原理&最佳实践

 

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术王老五

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值