当前位置: 首页 > news >正文

[自研开源] 数据集成之分批传输 v0.7

开源地址:gitee | github
详细介绍:MyData 基于 Web API 的数据集成平台
部署文档:用 Docker 部署 MyData
使用手册:MyData 使用手册
试用体验:https://demo.mydata.work
交流Q群:430089673

介绍

本篇基于 数据集成之任务流程 介绍任务分批传输的使用场景和配置操作。

使用场景

mydata使用API方式集成数据,当一次请求或响应 传输数据量较多时 可能无法完成、或容易对服务端造成影响,因此需要分为多次处理;

例如 常见的分页查询、导入大量数据时分批处理、集成对接时的全量同步等;

分批传输数据

业务系统与mydata集成时,在提供数据消费数据这两个方向上分别实现分批传输;

提供数据

由mydata调用应用的API获取数据,通过配置分批参数 实现一次任务内多次调用API获取完整数据,有以下两种基本的配置模式:

  • 配置了 固定参数size=10、递增参数current从1开始每次递增1、每次间隔1秒的任务;

在这里插入图片描述

  • 配置了 递增参数start从1开始每次递增100、递增参数end从100开始每次递增100、每次间隔1秒的任务;

在这里插入图片描述

执行过程如下代码,要点有:

  • 通过do-while结构 兼容单次和分批;

  • lastProduceData记录上一次数据,用于和本次对比数据,若重复 则结束,避免死循环(理论上很少有2次完全一样的数据);

  • 若分批有异常,则复用任务3次出错 自动结束并发送邮件通知的功能;

  • 执行完一次后,自动计算递增参数值;

// 提供数据
case MdConstant.DATA_PRODUCER:// 分批模式 记录上一次数据,用于对比两次数据,若重复 则结束,避免死循环List<Map> lastProduceData = null;do {// 若启用分批,则将分批参数加入请求参数中if (taskInfo.isBatch()) {Map<String, Object> batchParam = jobBatchService.parseToMap(taskInfo);Map<String, Object> reqParams = MapUtil.union(taskInfo.getReqParams(), batchParam);taskInfo.setReqParams(reqParams);}// 调用api 获取jsonString json = ApiUtil.read(taskInfo);// 将json按字段映射 解析为业务数据jobDataService.parseData(taskInfo, json);// 若没有返回数据,则结束处理if (CollUtil.isEmpty(taskInfo.getProduceDataList())) {break;}// 对比上一次数据if (lastProduceData != null) {if (CollUtil.isEqualList(lastProduceData, taskInfo.getProduceDataList())) {// 异常任务失败,邮件通知用户检查任务throw new RuntimeException("分批获取数据异常,最后两次获取的数据相同!");}}lastProduceData = taskInfo.getProduceDataList();// 根据条件过滤数据jobDataFilterService.doFilter(taskInfo);// 保存业务数据jobDataService.saveTaskData(taskInfo);// 更新环境变量jobVarService.saveVarValue(taskInfo, json);// 递增分批参数jobBatchService.incBatchParam(taskInfo);// 若启用分批,则等待间隔if (taskInfo.isBatch()) {ThreadUtil.sleep(taskInfo.getBatchInterval(), TimeUnit.SECONDS);}} while (taskInfo.isBatch());break;

消费数据

由mydata通过API向应用发送数据,通过配置分批参数 限制每次向API发送的数据量,从而减少数据查询量和请求处理时间;

如下图,配置了分批数量为1000的任务,分批参数为选填,mydata将按1000为限制查询符合条件的数据,通过API请求发送给应用;

在这里插入图片描述

执行过程如下代码,要点有:

  • 通过do-while结构 兼容单次和分批;
  • 自动管理分页参数,执行分页查询数据,发送给API;
  • 直到分页查询没有数据 自动结束;
// 消费数据
case MdConstant.DATA_CONSUMER:String dataCode = taskInfo.getDataCode();if (StrUtil.isEmpty(dataCode)) {break;}List<BizDataFilter> filters = taskInfo.getDataFilters();if (CollUtil.isNotEmpty(filters)) {// 解析过滤条件值中的 自定义字符串parseFilterValue(filters);// 排除值为null的条件filters = filters.stream().filter(filter -> filter.getValue() != null).collect(Collectors.toList());}int round = 0;Long skip = null;Integer limit = taskInfo.isBatch() ? taskInfo.getBatchSize() : null;do {if (taskInfo.isBatch()) {skip = (long) round * taskInfo.getBatchSize();}// 根据过滤条件 查询数据List<Map> dataList = bizDataDAO.list(MdUtil.getBizDbCode(taskInfo.getTenantId(), taskInfo.getProjectId(), taskInfo.getEnvId()), dataCode, filters, skip, limit);if (CollUtil.isEmpty(dataList)) {break;}taskInfo.setConsumeDataList(dataList);// 根据字段映射转换为api参数jobDataService.convertData(taskInfo);// 调用api传输数据ApiUtil.write(taskInfo);round++;// 若启用分批,则等待间隔if (taskInfo.isBatch()) {ThreadUtil.sleep(taskInfo.getBatchInterval(), TimeUnit.SECONDS);}}while (taskInfo.isBatch());break;

相关文章:

[自研开源] 数据集成之分批传输 v0.7

开源地址&#xff1a;gitee | github 详细介绍&#xff1a;MyData 基于 Web API 的数据集成平台 部署文档&#xff1a;用 Docker 部署 MyData 使用手册&#xff1a;MyData 使用手册 试用体验&#xff1a;https://demo.mydata.work 交流Q群&#xff1a;430089673 介绍 本篇基于…...

用 AI 编程-释放ChatGPT的力量

最近读了本书&#xff0c;是 Sean A Williams 写的&#xff0c;感觉上还是相当不错的。一本薄薄的英文书&#xff0c;还真是写的相当好。如果你想看&#xff0c;还找不到&#xff0c;可以考虑私信我吧。 ChatGPT for Coders Unlock the Power of AI with ChatGPT: A Comprehens…...

【快速解决】解决谷歌自动更新的问题,禁止谷歌自动更新,如何防止chrome自动升级 chrome浏览器禁止自动升级设置方法

目录 问题描述 解决方法 1、搜索栏搜索控制面板 2、搜索&#xff1a;服务 ​编辑 3、点击Windows工具 4、点击服务 ​5、禁止谷歌更新 问题描述 由于我现在需要装一个谷歌的驱动系统&#xff0c;但是目前的谷歌驱动系统的版本都太旧了&#xff0c;谷歌自身的版本又太新了…...

【Leetcode每日一题】模拟 - 替换所有的问号(难度⭐)(42)

1. 题目解析 题目链接&#xff1a;1576. 替换所有的问号 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 遍历字符串&#xff1a;从左到右逐个处理字符。 处理问号字符&#xff1a;对于每个问号字符&#xff0c;我们需…...

再见 mysql_upgrade

在数据库管理的世界里&#xff0c;随着技术的不断进步和业务的不断发展&#xff0c;数据库的版本升级成为了一个不可避免的过程。 MySQL 作为业界领先的开源关系型数据库管理系统&#xff0c;其版本迭代与功能优化同样不容忽视。 而在这个过程中&#xff0c;升级工具就显得尤为…...

.NET Core教程:入门与实践实例

.NET Core教程&#xff1a;入门与实践实例 在信息技术飞速发展的今天&#xff0c;掌握一门高效的编程技术成为了每个开发者不可或缺的技能。在众多编程框架中&#xff0c;.NET Core以其跨平台、高性能和易扩展的特性&#xff0c;受到了广大开发者的青睐。本文将通过实例&#…...

docker环境配置过程中的常见问题

1、pull镜像问题 docker pull jenkins/jenkins:lts Using default tag: latest Trying to pull repository docker.io/library/centos ... Get https://registry-1.docker.io/v2/library/centos/manifests/latest: Get https://auth.docker.io/token?scoperepository%3Alibr…...

精选2024年最佳项目管理系统!实用推荐与详细评测

随着企业规模的扩大&#xff0c;项目量也会呈几何倍的增长&#xff0c;项目管理系统就成了企业管理必不可少的一部分。2024年优秀的项目管理系统推荐。今年为大家带来Microsoft Project、Zoho Projects、Jira以及Wrike项目管理系统评测。 什么是项目管理系统&#xff1f; 项目…...

民航电子数据库:CAEMigrator迁移数据库时总是卡死

目录 一、场景二、异常情况三、排查四、应急方案 一、场景 1、对接民航电子数据库 2、将mysql数据库迁移到cae数据库 3、使用CAEMigrator迁移工具进行数据库迁移时&#xff0c;该工具会卡死&#xff08;不清楚是否是部署cae服务的服务器资源导致&#xff09; 二、异常情况 …...

数据结构 第6章 图(一轮习题总结)

数据结构 第6章 图 6.1 图的基本概念6.2 图的存储及基本操作6.3 图的遍历6.4 图的应用 6.1 图的基本概念&#xff08;2 4 11&#xff09; 6.2 图的存储及基本操作&#xff08;1 12 13 15 16&#xff09; 6.3 图的遍历&#xff08;2 3 5 16&#xff09; 6.4 图的应用 6.1 图的基…...

如何在智能交通系统中使用物联网技术提高道路安全和效率

在智能交通系统中&#xff0c;物联网&#xff08;IoT&#xff09;技术可以通过多种方式提高道路安全和效率。以下是利用物联网技术提高智能交通系统效能的具体方法&#xff1a; 1. 车与路、车与车通信&#xff08;V2X&#xff09;&#xff1a;通过在道路上部署传感器和路侧单元…...

七大 QC 工具图的定义与示例(看这篇就够了)

前言 七大 QC 工具图是通过数值的方式进行数据分析的工具&#xff0c;分别是鱼骨图、直方图、柏拉图、散布图、管制图、检查图和层别图。其实&#xff0c;我们在日常生活与工作中经常看到它们&#xff0c;只是样子和名字对不上而已&#xff0c;今天写这篇文章就是为了帮助自己…...

【JavaScript算法】DOM树层级显示

题目描述&#xff1a; 上述表达式的输出结果为 [DIV] [P, SPAN, P, SPAN] [SPAN, SPAN]直接上代码 let tree document.querySelector(".a"); function traverseElRoot(elRoot) {const result [];function traverse(element, level) {if (!result[level]) {resul…...

MySql实战--全局锁和表锁 :给表加个字段怎么有这么多阻碍

今天我要跟你聊聊MySQL的锁。数据库锁设计的初衷是处理并发问题。作为多用户共享的资源&#xff0c;当出现并发访问的时候&#xff0c;数据库需要合理地控制资源的访问规则。而锁就是用来实现这些访问规则的重要数据结构。 根据加锁的范围&#xff0c;MySQL里面的锁大致可以分成…...

axios请求类型是文件流怎么显示报错信息

axios请求类型是文件流&#xff0c;但是报错信息的话没法显示&#xff0c;在request.js文件中更改一下request拦截器代码&#xff1a; service.interceptors.request.use(config > { ...... , error > { console.log(error, 报错报错) // 处理请求错误 if (error.respons…...

DataX 源码改造支持Mysql 8.X

文章目录 DataX 源码改造支持Mysql 8.X问题背景克隆源代码并修改重新打包生产环境发布DataX 源码改造支持Mysql 8.X 问题背景 今天在使用DataX同步数据的时候遇到一个问题,报错如下 错误信息为:java.sql.SQLException: No suitable driver found for ["jdbc:mysql://…...

大数据学习-2024/3/29-oracle使用介绍

在plsql中登录ORACLE数据。 默认用户&#xff1a; 1、sys&#xff1a; 角色&#xff1a;数据库超级管理员账户。 权限&#xff1a;具有最高的权限&#xff0c;可以执行任何操作&#xff0c;包括操作数据字典和控制文件。可以创建和删除数据库对象&#xff0c;授予和回收其他用户…...

Vim - 文本编辑器 Vi vs Vim

你是否应该在学习 Vim 之前先学习 Vi&#xff0c;这完全取决于您自己、您的要求以及您的具体目标和需求。Vim 是 Vi 的扩展、增强和改进版本&#xff0c;它包括 Vi 的所有功能以及许多附加功能。 简约&#xff1a; Vi 设计简约。先学习 Vi 可以让你对基础知识有扎实的了解&…...

SpringBoot 登录认证(二)

SpringBoot 登录认证&#xff08;一&#xff09;-CSDN博客 SpringBoot 登录认证&#xff08;二&#xff09;-CSDN博客 SpringBoot登录校验&#xff08;三&#xff09;-CSDN博客 HTTP是无状态协议 HTTP协议是无状态协议。什么又是无状态的协议&#xff1f; 所谓无状态&…...

C#语言规范及特殊用法笔记

前言 记录在学习C#过程中遇到的知识点&#xff0c;会持续更新。 1. 常用数据类型结构的默认值 创建类的一个实例时&#xff0c;在执行构造函数之前&#xff0c;如果没给成员变量赋初始值&#xff0c;C#编译器将每一个成员变量初始化为默认值。虽然C#编译器为每个类型都设置了…...

Token Plan 套餐怎么选,Taotoken 预付费模式下的成本控制实践

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Token Plan 套餐怎么选&#xff0c;Taotoken 预付费模式下的成本控制实践 对于有稳定大模型调用需求的开发者或团队而言&#xff0…...

实测推荐!2026年毕业论文5000字范文免费下载AI写作工具排行,查重降AI率全攻略

本文由知学术AIPaperGPT内容团队实测撰写 2026-05-11实测推荐&#xff01;2026年毕业论文5000字范文免费下载AI写作工具排行&#xff0c;查重降AI率全攻略又是一年毕业季&#xff0c;无数本科、硕士生正为毕业…...

HiveWE:基于C++20模块化架构的下一代魔兽争霸III地图创作引擎

HiveWE&#xff1a;基于C20模块化架构的下一代魔兽争霸III地图创作引擎 【免费下载链接】HiveWE A Warcraft III world editor. 项目地址: https://gitcode.com/gh_mirrors/hi/HiveWE HiveWE作为开源社区驱动的魔兽争霸III地图编辑器&#xff0c;通过现代C20模块化架构重…...

如何用JPlag守护代码原创性:5分钟快速上手指南

如何用JPlag守护代码原创性&#xff1a;5分钟快速上手指南 【免费下载链接】JPlag State-of-the-Art Source Code Plagiarism & Collusion Detection. Check for plagiarism in a set of programs. 项目地址: https://gitcode.com/gh_mirrors/jp/JPlag 你是否曾担心…...

模型视图(13):【实战】QColumnView构建级联文件浏览器[官翻]

1. QColumnView实战&#xff1a;打造级联文件浏览器 第一次看到QColumnView这个控件时&#xff0c;我正需要开发一个类似macOS Finder的文件管理器。当时尝试了各种方案都不够理想&#xff0c;直到发现Qt这个隐藏的宝藏控件。它用多列联动的形式展示层级数据&#xff0c;特别适…...

Google Meet开启Gemini字幕后CPU飙升300%?资深SRE教你用Chrome Tracing+Gemini Profiling Dashboard精准定位瓶颈

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Google Meet开启Gemini字幕后CPU飙升300%&#xff1f;资深SRE教你用Chrome TracingGemini Profiling Dashboard精准定位瓶颈 当团队在Google Meet中启用Gemini实时字幕功能后&#xff0c;参会终端Chrom…...

还在为视频号下载烦恼吗?3分钟学会res-downloader批量下载技巧

还在为视频号下载烦恼吗&#xff1f;3分钟学会res-downloader批量下载技巧 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 你…...

npcpy:模块化AI智能体框架,从角色构建到团队协作的工程实践

1. 项目概述&#xff1a;一个为AI应用构建者准备的“瑞士军刀”如果你和我一样&#xff0c;在过去几年里尝试过用大语言模型&#xff08;LLM&#xff09;构建点什么东西&#xff0c;那你大概率经历过这样的循环&#xff1a;从LangChain、LlamaIndex这类框架开始&#xff0c;被它…...

从“Hello There!”徽章看低功耗Mesh网络在嵌入式社交硬件的实现

1. 项目概述&#xff1a;当硬件徽章成为社交网络的物理层如果你参加过大型的技术会议&#xff0c;尤其是像嵌入式系统大会&#xff08;ESC&#xff09;这样的场合&#xff0c;你肯定对那种既兴奋又略带尴尬的社交氛围不陌生。满屋子都是聪明绝顶的工程师&#xff0c;大家脑子里…...

AI智能体基准测试与差异分析:从评估原理到工程实践

1. 项目概述&#xff1a;当AI智能体学会“自我进化”最近在开源社区里&#xff0c;一个名为agentdiff的项目引起了我的注意。它的名字很有意思&#xff0c;直译过来是“智能体差异”。乍一看&#xff0c;你可能会联想到代码差异对比工具diff&#xff0c;但它的前缀agent又明确指…...