数据库如何实现动态分批数据处理

发布时间:2026/10/23 2:18:38

数据库如何实现动态分批数据处理 同事为处理大批量数据让大模型帮忙写了一个分批处理的逻辑具体需求如下1.将所有数据均匀分为8组8个channel这里的8组可以根据需求改变比如10组12组等可以把下面我改完的逻辑封装成函数具体分为几组可作为参数传入即实现动态分批处理2.以某个字段字段为type排序将排序后的数据进行分组3.前多少条分到第一组中间多少条分到第二组依次4.如果8组不能完全分配多余的数据条数从上到下逐一分配5.例假设只有25条数据排序后前4条为第1组第5-7条为第2组依次大模型写出来的逻辑有点问题数据并没有均分比如假设数据总数为25按大模型的逻辑第1组分了2条数据第2组至第6组每组分了4条第7组分了3条第8组没有分到数据这样是不均匀的。于是我便在大模型的基础上调整了它的逻辑最终实现了均匀分配。下面是大模型写的逻辑do language plpgsql$$declaretypes int;v_channel_id int;v_max_days int; -- 存储每个channel的type数量v_total_types int;v_types_per_channel int;v_remaining_types int;begin-- 获取总type数量v_total_types 25;-- 计算每个channel应分配的type数量v_types_per_channel : v_total_types / 8;v_remaining_types : v_total_types % 8;raise notice 总共types个数为%,最小channel_id容量为%,求模数为%,v_total_types,v_types_per_channel,v_remaining_types;-- 按type排序遍历并根据序号分配到对应的channel_id (1-8)FOR types IN1..v_total_typesLOOP-- 计算当前type应该分配到哪个channelv_channel_id : ((types - 1) / CEIL(v_total_types::DECIMAL / 8)) 1;-- 确保channel不超过8v_channel_id : LEAST(v_channel_id, 8);-- 计算当前channel的type容量(max_days)IF v_channel_id v_remaining_types THEN-- 前v_remaining_types个channel多分配一个typev_max_days : v_types_per_channel 1;ELSE-- 其余channel按基础数量分配v_max_days : v_types_per_channel;END IF;raise notice 当前是第%个type值分组进入第%个channel,该channel的容量为%,types,v_channel_id,v_max_days;END LOOP;end;$$执行输出如下 NOTICE: 当前是第1个type值分组进入第1个channel,该channel的容量为4 NOTICE: 当前是第2个type值分组进入第1个channel,该channel的容量为4 NOTICE: 当前是第3个type值分组进入第2个channel,该channel的容量为3 NOTICE: 当前是第4个type值分组进入第2个channel,该channel的容量为3 NOTICE: 当前是第5个type值分组进入第2个channel,该channel的容量为3 NOTICE: 当前是第6个type值分组进入第2个channel,该channel的容量为3 NOTICE: 当前是第7个type值分组进入第3个channel,该channel的容量为3 NOTICE: 当前是第8个type值分组进入第3个channel,该channel的容量为3 NOTICE: 当前是第9个type值分组进入第3个channel,该channel的容量为3 NOTICE: 当前是第10个type值分组进入第3个channel,该channel的容量为3 NOTICE: 当前是第11个type值分组进入第4个channel,该channel的容量为3 NOTICE: 当前是第12个type值分组进入第4个channel,该channel的容量为3 NOTICE: 当前是第13个type值分组进入第4个channel,该channel的容量为3 NOTICE: 当前是第14个type值分组进入第4个channel,该channel的容量为3 NOTICE: 当前是第15个type值分组进入第5个channel,该channel的容量为3 NOTICE: 当前是第16个type值分组进入第5个channel,该channel的容量为3 NOTICE: 当前是第17个type值分组进入第5个channel,该channel的容量为3 NOTICE: 当前是第18个type值分组进入第5个channel,该channel的容量为3 NOTICE: 当前是第19个type值分组进入第6个channel,该channel的容量为3 NOTICE: 当前是第20个type值分组进入第6个channel,该channel的容量为3 NOTICE: 当前是第21个type值分组进入第6个channel,该channel的容量为3 NOTICE: 当前是第22个type值分组进入第6个channel,该channel的容量为3 NOTICE: 当前是第23个type值分组进入第7个channel,该channel的容量为3 NOTICE: 当前是第24个type值分组进入第7个channel,该channel的容量为3 NOTICE: 当前是第25个type值分组进入第7个channel,该channel的容量为3截图如下我修改完后的逻辑如下do language plpgsql$$declaretypes int; --假设type为某个表用以排序的字段v_channel_id int; --当前的types应该分配进第几个channelv_max_days int; --当前channel_id的type容量v_total_types int; --总的types个数v_types_per_channel int; --该次分配中channel_id的最小容量v_remaining_types int; --求模数即以分成8个channel_id为例会剩余几个type无法完成一轮分配begin-- 获取总type数量v_total_types 25; --假设总的type个数为25这个个数可以随意改动以验证是否均匀分配假设要分配的channel个数为8-- 计算每个channel应分配的type数量v_types_per_channel : v_total_types / 8; --该次分配中channel_id的最小容量v_remaining_types : v_total_types % 8; --求模数即以分成8个channel_id为例会剩余几个type无法完成一轮分配raise notice 总共types个数为%,最小channel_id容量为%,求模数为%,v_total_types,v_types_per_channel,v_remaining_types;-- 按type排序遍历并根据序号分配到对应的channel_id (1-8)FOR types IN1..v_total_typesLOOP-- 计算当前type应该分配到哪个channelv_channel_id : floor((types - 1) / CEIL(v_total_types::DECIMAL / 8)) 1;--大于求模数的部分重新计算channel_idif v_channel_id v_remaining_types thenv_channel_id : floor((types-1((v_remaining_types1)*floor(v_total_types::DECIMAL / 8) - v_remaining_types*ceil(v_total_types::DECIMAL / 8))) / floor(v_total_types::DECIMAL / 8));end if;-- 计算当前channel的type容量(max_days)IF v_channel_id v_remaining_types THEN-- 前v_remaining_types个channel多分配一个typev_max_days : v_types_per_channel 1;ELSE-- 其余channel按基础数量分配v_max_days : v_types_per_channel;END IF;raise notice 当前是第%个type值分组进入第%个channel,该channel的容量为%,types,v_channel_id,v_max_days;END LOOP;end;$$执行输出如下 NOTICE: 当前是第1个type值分组进入第1个channel,该channel的容量为4 NOTICE: 当前是第2个type值分组进入第1个channel,该channel的容量为4 NOTICE: 当前是第3个type值分组进入第1个channel,该channel的容量为4 NOTICE: 当前是第4个type值分组进入第1个channel,该channel的容量为4 NOTICE: 当前是第5个type值分组进入第2个channel,该channel的容量为3 NOTICE: 当前是第6个type值分组进入第2个channel,该channel的容量为3 NOTICE: 当前是第7个type值分组进入第2个channel,该channel的容量为3 NOTICE: 当前是第8个type值分组进入第3个channel,该channel的容量为3 NOTICE: 当前是第9个type值分组进入第3个channel,该channel的容量为3 NOTICE: 当前是第10个type值分组进入第3个channel,该channel的容量为3 NOTICE: 当前是第11个type值分组进入第4个channel,该channel的容量为3 NOTICE: 当前是第12个type值分组进入第4个channel,该channel的容量为3 NOTICE: 当前是第13个type值分组进入第4个channel,该channel的容量为3 NOTICE: 当前是第14个type值分组进入第5个channel,该channel的容量为3 NOTICE: 当前是第15个type值分组进入第5个channel,该channel的容量为3 NOTICE: 当前是第16个type值分组进入第5个channel,该channel的容量为3 NOTICE: 当前是第17个type值分组进入第6个channel,该channel的容量为3 NOTICE: 当前是第18个type值分组进入第6个channel,该channel的容量为3 NOTICE: 当前是第19个type值分组进入第6个channel,该channel的容量为3 NOTICE: 当前是第20个type值分组进入第7个channel,该channel的容量为3 NOTICE: 当前是第21个type值分组进入第7个channel,该channel的容量为3 NOTICE: 当前是第22个type值分组进入第7个channel,该channel的容量为3 NOTICE: 当前是第23个type值分组进入第8个channel,该channel的容量为3 NOTICE: 当前是第24个type值分组进入第8个channel,该channel的容量为3 NOTICE: 当前是第25个type值分组进入第8个channel,该channel的容量为3截图如下
延伸阅读

更多相关文章

2026/10/23 2:18:38

C++类与对象入门:从封装、构造函数到析构函数的完整实践

如果你刚接触 C 不久,准备认认真真把类与对象搞明白,那这一篇可以带着你从零走一遍。我在初学阶段最大的感受是:函数写熟了,结构体也用过,但一遇到 class 就卡住——不是看不懂语法,而是不知道“为什么非要…

2026/10/23 2:18:38

科技成果转化调研方法:从技术到场景的断点识别

一位做产业研究的老友最近带队去考察了一家智能机器人企业,回来后跟我聊了很久。他说现在看科技企业,最怕的就是被一堆“自研算法”“行业领先”“全栈能力”的词砸晕,真正有价值的调研,必须围绕“转化应用”这四个字展开&#xf…

2026/10/23 3:23:45

银河麒麟V10安装exe卡93%?CrossOver兼容层排查与避坑指南

简介:面向国产化系统运维人员与信创项目实践者,围绕银河麒麟桌面版V10系统使用CrossOver安装Windows exe应用这一常见需求,整理了完整的实测过程。资源为单个docx文档,共1个文件,包体约5.27MB,详细记录了安…

2026/10/23 3:23:45

F5双机冗余切换机制:串口心跳与网络心跳原理及避坑指南

简介:这份文档面向负责F5 BIG-IP设备运维与高可用架构设计的网络工程师,系统讲解双机冗余配置与全冗余解析,帮助解决负载均衡场景下的故障切换与流量接管问题。内容围绕串口心跳与网络心跳两种冗余方式展开,涵盖心跳线电平监控、T…

2026/10/23 3:23:45

LeetCode 347 前K个高频元素:堆、桶排序与快速选择全解法解析

1. 题目拆解与思路选型先聊点实在的。LeetCode热题100里的347题“前K个高频元素”,几乎是面试中出镜率最高的几道题之一。它表面考的是“统计频率 取前K”,实际上考察的是你对哈希表、堆、桶排序、快速选择这些基础数据结构和算法的理解深度。很多人在面…

2026/10/23 3:23:45

前K个高频元素:堆、快速选择、桶排序三种解法全解析

LeetCode Hot 100 里的第 347 题“前K个高频元素”,是我跟人聊算法时最常推荐拿来当“堆专题入门第一题”的一道题。题目描述很简短,给你一个整数数组和一个 k,让你返回数组里出现频率前 k 高的元素,顺序不限。但就是这么一道看似…

2026/10/23 3:23:45

鸟哥Linux私房菜第四版:从内存排错到SELinux的实战指南

简介:《鸟哥的Linux私房菜-基础篇》第四版是一份面向Linux初学者的入门学习资料,适合具备基本计算机操作能力、希望系统掌握Linux概念与常用工具的读者,也可供有一定经验的IT技术人员查漏补缺。内容从计算机组成与操作系统原理讲起&#xff0…

2026/10/23 3:18:43

多组服务状态同步方案选型与实战:一致性、版本号与对账机制

1. 先想明白:多组服务为什么会对状态“各执一词”先描述一个我猜你一定见过的场景。某次线上安排上线了一个订单系统,为了保证可用性,在同一个机房部署了两套服务,前面挂着负载均衡。平时流量被随机转发到任意一台实例&#xff0c…

2026/10/22 11:29:28

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/23 0:02:26

Verilog实现FPGA密码锁:矩阵键盘与状态机设计实战

说实话,这几年接触了不少想入门FPGA的朋友,如果你问哪个项目能一口气把Verilog的核心基本功串起来,我通常会推荐电子密码锁。这个项目看着不起眼,却把矩阵键盘扫描、按键消抖、状态机设计、动态显示刷新、外设控制这些数字逻辑里的…

2026/10/23 0:02:26

数据服务监控运维实战:从指标体系到告警治理与故障排查

周末凌晨两点,手机震了。第一反应是“数据服务挂了”。打开电脑看了下,果然,某张核心报表的数据产出时间已经超过SLA两小时,下游三个业务方连着发来问询。这种场景,做过大数据运维的人都不会陌生。数据服务的监控与运维…

2026/10/23 0:02:26

FreeRTOS任务通知实战详解:内核原理、API与避坑指南

裸机编程切到RTOS之后,任务之间的通信和同步永远是躲不开的坎。前面聊过队列、信号量、互斥锁、事件组,这次把FreeRTOS任务通知(Task Notification)单独拎出来讲透。原因很简单:任务通知是FreeRTOS里最容易用错、也最容…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑