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

article/2025/10/16 5:28:07

跑批的应用场景

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

  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分布式计算原理&最佳实践

 


http://chatgpt.dhexx.cn/article/Ll6Lbu43.shtml

相关文章

跑批bat、shell

“跑批”也叫“批量处理”。批处理&#xff0c;也称为批处理脚本。顾名思义&#xff0c;批处理就是对某对象进行批量的处理&#xff0c;通常被认为是一种简化的脚本语言&#xff0c;它应用于DOS和Windows系统中。批处理文件的扩展名为bat 。 批处理定义&#xff1a;顾名思义&a…

gPRC基础教程

1.什么是RPC? RPC 远过程调用.在理解远程调用之前,首先我们来了解一下本地调用,只有更好的理解了本地调用,才能更好的理解RPC. 1.1 本地调用ex:本地的函数调用在函数调用的时候,一般会经过几个步骤 返回地址入栈参数入栈提升堆栈空间函数参数的复制执行函数调用清空堆栈 1.…

GPRM/GNRMC定位信息的读取与解析

GPRM/GNRMC定位信息的读取与解析 参考网址&#xff1a;http://www.cnblogs.com/88223100/p/GPRM_GNRMC_Transform.html 帧头 UTC时间 状态 纬度 北纬/南纬 经度 东经/西经 速度 $GPRMC hhmmss.sss A/V ddmm.mmmm N/S dddmm.mmmm E/W 节 方位角 UTC日期 磁偏角…

GPRMC转经纬度 地理位置

前言 一、GPRMC是什么&#xff1f; 二、GPRMC如何转经纬度 三、python加地图实现定位 1.Python代码 2.地图定位 四、通过python直接输出位置的尝试 1.需要用到的库geocoder 2.需要准备的库folium 总结 前言 在实际汽车路测的时候会出现GPS偏移&#xff0c;这个时候就需要将GPR…

USB转串口 模拟 PPS+GPRMC 进行授时

把 PC的系统时间 通过USB转串口发出来 来模拟 PPSGPRMC 授时, 这大冷天的, 用来在室内测试MCU或者SOC的授时功能, 传感器的授时与线束检测, 测试干扰等等, 还是比较合适的. 如下图, 左边为 USB转9针RS232串口, 右边为 USB转TTL串口 原理: PPS 有 3V3 / 5V / 12V 等规格, 这里…

GPC规范-SCP02

SPC02 流程 SPC02 指令 命令&#xff1a; 响应&#xff1a; 举例回复&#xff1a; 密钥分散数据&#xff1a; 0000FFFFFFFFFFFFFFFF Key Info&#xff1a; 20 02&#xff08;scp02&#xff09; Card挑战数&#xff1a; 001AC6619BE83082 Card加密值&#xff1a; 7…

STM32模拟GPS输出PPS、GPRMC与VLP16时钟同步

这里写目录标题 1.VLP16与GPS相关的管脚&#xff1a;2.利用GPS信息完成时间同步 TimeSynchronization3.查找同步关系4.修改ROS代码结论 1.VLP16与GPS相关的管脚&#xff1a; GPS-RECEIVE 接收GPS的GPRMC语句&#xff0c;注意是RS232电平(high 3-15V&#xff0c;low 1.2V以下)&…

c++处理GPRMC

#include <iostream> #include<string> #include<vector>// A::member 表示A成员中的member // namespace my_vary202234610229 namespace是c的关键字&#xff0c;将变量定义在自己创建的my_vary命名空间 // 访问命名空间中的变量需要作用域分解符 // 命名空…

gPRC基本介绍

1.说明 gRPC英文全名为Google Remote Procedure Call&#xff0c; 即Google远程过程调用&#xff0c; 是Google发布的一个高性能、通用的开源RPC框架&#xff0c; 2.gRPC定义 gRPC是一个现代的开源高性能RPC框架&#xff0c; 可以在任何环境中运行。 它可以高效地连接数据中心内…

自动驾驶时间同步分析概述--PPS/GPRMC/PTP/全域架构时间同步方案

时间同步的重要性在生活中已经充分体现。试想你因一个姑娘在酒吧和别人大打出手&#xff0c;并约定下周六早上九点在后海小树林里进行群体活动。为此你微信召集了在南非、印度、泰国干建筑的好兄弟。可在你如期赴约的时候&#xff0c;发现队友只有河畔的孤影。当你在病床上睁开…

U-BLOX GPS 模块及GPRMC指令解析

受朋友所托&#xff0c;调试一款GPS模块&#xff0c;该模块是UBLOX的NEO-6M GPS模组。想到用这款GPS的人较多&#xff0c;自己日后也有可能在用到这个模块&#xff0c;就写下这份笔记。 一、介绍 基本信息如下&#xff1a; 1、 模块采用U-BLOX NEO-6M模组&#xff0c;体积小巧&…

ROS节点解析GPS数据:GPRMC/GPFDP/HEADINGA

数据解析&#xff0c;肯定是要知道数据格式的&#xff1a; 数据格式参考&#xff1a;&#xff08;前人已经总结的比较齐全了&#xff09; https://blog.csdn.net/u010384390/article/details/78432016?ops_request_misc%257B%2522request%255Fid%2522%253A%2522163031225416…

python各种模块,迭代器,生成器

从逻辑上组织python代码&#xff08;变量&#xff0c;函数&#xff0c;类&#xff0c;逻辑&#xff1a;实现一个功能&#xff09; 本质就是.py结尾的python文件(文件名&#xff1a;test.py,对应的模块名就是test) 包&#xff1a;用来从逻辑上组织模块的,本质就是一个目录&#…

VFS - 虚拟文件系统的加载和导出

VFS - 代码生成器预览功能实现VFS - 虚拟文件系统基本操作方法的封装VFS - 虚拟文件系统的加载和导出 这是 VFS 的最后一篇&#xff0c;前面两篇中的基本方法已经实现了一个简单的虚拟文件系统&#xff0c;可以创建目录和文件&#xff0c;可以读写文件的内容。在这最后一篇中&a…

如何优雅的使用javascript递归画一棵结构树

递归和尾递归 简单的说&#xff0c;递归就是函数自己调用自己&#xff0c;它作为一种算法在程序设计语言中广泛应用。其核心思想是把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。一般来说&#xff0c;递归需要有边界条件、递归前进阶段和递归返回阶段…

python数据结构和算法 时间复杂度分析 乱序单词检测 线性数据结构 栈stack 字符匹配 表达式求值 queue队列 链表 递归 动态规划 排序和搜索 树 图

python数据结构和算法 参考 本文github 计算机科学是解决问题的研究。计算机科学使用抽象作为表示过程和数据的工具。抽象的数据类型允许程序员通过隐藏数据的细节来管理问题领域的复杂性。Python是一种强大但易于使用的面向对象语言。列表、元组和字符串都是用Python有序集合…

黑马毕向东Java课程笔记(day20-1——20-17)IO流:File类及相关方法、递归、递归的相关练习、Properties、PrintWriter类与PrintStream类、合并流与切割流

1、File类概述   File是文件和目录路径名的抽象表示形式。 用来将文件或者文件夹封装成对象&#xff0c;方便对文件与文件夹的属性信息进行操作。   前面说到的“流”&#xff0c;它只能操作数据&#xff0c;想要操作由数据封装成的文件的信息&#xff0c;必须使用File对象…

算法: 如何优雅的使用javascript递归画一棵结构树

递归和尾递归 简单的说&#xff0c;递归就是函数自己调用自己&#xff0c;它做为一种算法在程序设计语言中广泛应用。其核心思想是把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。一般来说&#xff0c;递归需要有边界条件、递归前进阶段和递归返回阶段…

day04函数名 闭包 迭代器 生成器(各种推导式和生成器表达式) 内置函数 装饰器 递归...

一.今日内容概 1. 函数本质就是一个内存地址. 用起来和变量一模一样 2. 闭包 内层函数对外层变量的使用 1. 保护变量 2. 让一个变量常驻内存 3. 迭代器 可迭代对象: __iter__ 迭代器: __iter__ __next__ from collecti…

linux 迭代列出文件,讲解在Linux命令行下使用ls命令列出文件的技巧

Linux ls 命令可以说是在 Linux 中常见到的命令之一&#xff0c;因为使用它可以掌握系统中文件所在目录中的内容&#xff0c;从而能够查看与修改文件&#xff0c;如果你正在使用 Linux ls 命令&#xff0c;不妨看一下以下技巧&#xff0c;它能帮助你更快速的完成任务。 ls 命令…