ageiport使用

简介: ageiport使用

如何实现高效的导入和导出,是我们在日常开发中,经常会遇到的问题,进行Excel的导入和导出,有时候数据量大,导入导出很慢,怎么办?

AGEIPort来替你解决这个问题,AGEIPort是阿里巴巴开源的一款高性能导入导出方案。

AGEIPort 是数字供应链孵化并在阿里巴巴集团内广泛使用的一套性能卓越、稳定可靠、功能丰富、易于扩展、生态完整的数据导入导出方案,致力于帮助开发者在toB复杂业务场景下能够快速交付高性能、体验优、易维护的数据导入导出功能,如用户页面上的Excel/CSV数据文件上传和下载。目前在阿里巴巴集团内部已有盒马、菜鸟、本地生活、阿里健康、钉钉、淘系等部门有较多使用,并成为多个技术组件的基础底座,经历多次618和双11大促考验,稳定导入导出数据300~400亿条/月。

一、AGEIPort 使用

首先,可以基于example进行测试使用


基于这两个类,我们可以进行测试debug跟踪其实现的过程。

二、导入


其中executeTask是最重要的方法:

TaskExecuteResult response = ageiPort.getTaskService().executeTask(request);

然后会根据创建的主任务,通过eventbus通知子任务执行任务。

三、导出


获取任务的阶段信息可以看到也有对应的provider:

导入导出的provider,通过getStages()可以获取具体的执行任务的过程:

四、导入导出执行任务的具体实现操作worker


执行任务拿到相关信息的过程:

获取任务中的参数信息
获取任务注册信息
创建创建主任务请求参数
获取任务客户端TaskServerClient
通过taskServiceClient拿到主任务的mainTaskId和主任务
执行接收accept=> ageiPort.getTaskAcceptor().accept(mainTask)
返回任务执行响应结果

其中ageiPort.getTaskAcceptor().accept(mainTask)这个过程中很重要。

根据主任务task拿到code,从而拿到对应的任务,进行主任务创建,同时对主任务时间进行获取
创建一个task主任务事件
进入发布消息阶段,执行post发布消息
接着相关监听会执行任务,可以看到其基于eventbus实现的订阅@Subscribe

执行任务的过程中会对对应的阶段进行记录,同时调用next获取下一个阶段信息stage,然后执行对应的任务。

从记录的stage来看,可以看到其先由主任务执行的过程中,会通知subTask执行任务,这个过程会将task进行分片,然后均摊到对应的处理中,然后执行处理,处理的过程中完成后,执行任务合并,然后进行返回。

List<ImportSlice> slices = sliceStrategy.slice(context);
   context.load(slices);
   // 执行分片操作
   for (ImportSlice slice : slices) {
                String subTaskId = TaskIdUtil.genSubTaskId(mainTaskId, slice.getNo());
                System.out.println("----通知子任务进行subTask操作ImportMainTaskWorker-----");
                ageiPort.getEventBusManager().getEventBus(executeType).post(TaskStageEvent.subTaskEvent(subTaskId, subTaskCreated));
            }

调用subTask执行。

五、执行任务的操作流程流转

导入和导出的相关执行的相关过程类似,这里以导出的流程进行归纳:

六、导出流程

导出主任务流程


导出子任务流程:


七、分片策略

分片的策略可以看到目前一种:均摊策略 AvgImportSliceStrategy,同时分片的数量是以1000为一片进行处理的。

int sliceCount = (items.size() - 1) / pageSize + 1;

eventBus实现类似于Spring的事件。

任务进度完成添加日志后,更新主任务监控事件发布信息。

以上是基于ageiport使用整理

目录
相关文章
|
SQL 存储 Oracle
Oracle 面试题及答案整理,最新面试题
Oracle 面试题及答案整理,最新面试题
1603 0
idea快速生成get set 构造方法的快捷键
idea快速生成get set 构造方法的快捷键
1082 0
|
12月前
|
XML Java 开发者
springboot自动装配的基本原理
Spring Boot自动装配基于“约定大于配置”理念,通过@SpringBootApplication、@EnableAutoConfiguration与spring.factories机制,结合条件注解实现智能Bean加载。它根据依赖自动配置组件,大幅简化开发。其核心是AutoConfigurationImportSelector筛选符合条件的配置类,实现按需装配。开发者可专注业务,享受“开箱即用”的便捷体验。(238字)
|
11月前
|
敏捷开发 人工智能 监控
AI 正在“杀死”敏捷开发?别闹了,它反而让我们重新读懂敏捷的真谛
AI时代,敏捷开发非但不会消亡,反而迎来重生。它戳破伪敏捷的泡沫,倒逼团队回归“以人为本、快速验证价值”的初心。AI替代不了人的洞察与判断,只会让真正的敏捷更珍贵。
|
人工智能 API 数据处理
本周GPT-5.5发布,同步先发Images 2.0,一文给你讲明白它想干嘛
OpenAI本周连发GPT-5.5与ChatGPT Images 2.0:前者强化真实任务执行能力(代码修复、终端操作、办公文档达行业领先水平);后者突破文字渲染、指令理解与“思考式”绘图,可生成可交付的海报、信息图等视觉资产。二者协同,正将ChatGPT从“问答工具”升级为覆盖方案构思、内容生成到视觉落地的全链路智能工作台。(239字)
|
10月前
|
安全 数据库 Windows
Win11新UEFI安全启动证书推送中,3步自查+手动更新避坑指南
2026年6月旧UEFI安全启动证书将到期,未更新可能导致Windows设备无法启动。微软正向Win11 22H2/23H2设备推送新证书(含KB5067019补丁),用户可通过系统信息确认版本与安全启动状态,联网后通过Windows更新或微软官网手动安装。安装后可用PowerShell命令验证。注意:勿随意修改BIOS控制位,须参照最新官方指南操作,避免启动异常,建议尽早完成更新。
8720 5
|
缓存 算法 程序员
C++STL底层原理:探秘标准模板库的内部机制
🌟蒋星熠Jaxonic带你深入STL底层:从容器内存管理到红黑树、哈希表,剖析迭代器、算法与分配器核心机制,揭秘C++标准库的高效设计哲学与性能优化实践。
1016 3
C++STL底层原理:探秘标准模板库的内部机制
阿里云服务器怎么开发票?图文教程来了
在阿里云,用户可在用户中心的发票管理中开具电子或纸质发票。首次开票需设置发票抬头,可选个人或企业,以及增值税普通或专用发票。个人账号无法直接开企业发票,需变更实名认证。发票税率因产品而异,通常为6%或13%。发票抬头可修改,纸质发票邮寄费用由阿里云承担(特殊情况除外)。电子发票同样可报销。更多详情见阿里云官方帮助中心。
2338 3
|
自然语言处理 运维 DataWorks
智能体Agent解析:用自然语言重构数据开发工作方式
大数据开发治理平台DataWorks基于MCP协议,正式发布了DataWorks Agent,内置DataWorks MCP Server V1.0。该功能支持在DataWorks Data Studio中通过自然语言交互完成数据开发任务,实现了需求即代码的开发体验。本文将详细介绍如何通过配置使用DataWorks MCP Server进行任务的开发和运维管理。
1474 3
在Linux中,ps aux 中的 VSZ 代表什么意思?RSS 代表什么意思?
在Linux中,ps aux 中的 VSZ 代表什么意思?RSS 代表什么意思?