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使用整理

目录
相关文章
|
9月前
|
Java 数据挖掘 数据处理
探索 Java 的响应式编程模型
【4月更文挑战第19天】响应式编程在Java中日益重要,它基于事件驱动,强调响应性和弹性。事件流、观察者模式和背压是其关键概念。优势包括高效资源利用、提高响应性和增强系统弹性。Reactor和RxJava是常用的实现工具,适用于实时数据处理、异步通信和移动应用等场景。但这也带来复杂性增加、调试困难和较高的学习曲线。正确利用可构建高性能应用,但也需注意挑战。
194 0
|
9月前
|
Java BI API
Java如何实现文件批量导入导出(兼容xls,xlsx)
Java如何实现文件批量导入导出(兼容xls,xlsx)
268 0
|
自然语言处理 NoSQL Redis
短链平台设计
一种生产环境可用的短链生成方法,将长度较长、难以识别的长链转换成长度可控的短链,点击短链再跳转回长链的方法
430 0
|
easyexcel Java Maven
百万数据excel导出功能怎么做
百万数据excel导出功能怎么做
437 0
|
存储 缓存 关系型数据库
【MySQL进阶-08】深入理解innodb存储格式,双写机制,buffer pool底层结构和淘汰策略
【MySQL进阶-08】深入理解innodb存储格式,双写机制,buffer pool底层结构和淘汰策略
825 0
|
3月前
|
Java
轻松上手Java字节码编辑:IDEA插件VisualClassBytes全方位解析
本插件VisualClassBytes可修改class字节码,包括class信息、字段信息、内部类,常量池和方法等。
219 6
|
7月前
|
编解码
发现一款免费的网页视频下载神器
免费的网页视频下载神器
1496 0
|
JSON Cloud Native 中间件
导入导出框架AGEIPort(GEI)正式开源
AGEIPort 是数字供应链孵化并在阿里巴巴集团内广泛使用的一套性能卓越、稳定可靠、功能丰富、易于扩展、生态完整的数据导入导出方案,致力于帮助开发者在toB复杂业务场景下能够快速交付高性能、体验优、易维护的数据导入导出功能,如用户页面上的Excel/CSV数据文件上传和下载。 目前在阿里巴巴集团内部已有盒马、菜鸟、本地生活、阿里健康、钉钉、淘系等部门有较多使用,并成为多个技术组件的基础底座,经历多次618和双11大促考验,稳定导入导出数据300~400亿条/月。
38229 9
导入导出框架AGEIPort(GEI)正式开源
|
9月前
|
XML 负载均衡 Dubbo
了解Dubbo配置:优先级、重试和容错机制的秘密【五】
了解Dubbo配置:优先级、重试和容错机制的秘密【五】
451 0
|
资源调度 Java 数据库连接
31.2k!这是我见过最强的后台管理系统 !
本期项目概览: ruoyi-vue-pro:RuoYi-Vue 全新 Pro 版本 AGEIPort:数据导入导出解决方案 PowerJob:分布式调度与计算 mybatis-crypto:mybatis 字段加解密组件 novel:小说精品屋 ruoyi-vue-pro:RuoYi-Vue 全新 Pro 版本