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

目录
相关文章
|
JavaScript 前端开发 Java
正则表达式深度解析:匹配任意字符串
【4月更文挑战第1天】
8168 0
|
缓存 NoSQL Java
【JetCache】JetCache的使用方法与步骤
【JetCache】JetCache的使用方法与步骤
9159 1
|
1月前
|
人工智能 自然语言处理 安全
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
本文介绍了Claude Code终端AI助手的使用指南,主要内容包括:1)常用命令如版本查看、项目启动和更新;2)三种工作模式切换及界面说明;3)核心功能指令速查表,包含初始化、压缩对话、清除历史等操作;4)详细解析了/init、/help、/clear、/compact、/memory等关键命令的使用场景和语法。文章通过丰富的界面截图和场景示例,帮助开发者快速掌握如何通过命令行和交互界面高效使用Claude Code进行项目开发,特别强调了CLAUDE.md文件作为项目知识库的核心作用。
30552 67
Claude Code 全攻略:命令大全 + 实战工作流(建议收藏)
|
SQL 关系型数据库 数据库
学习分布式事务Seata看这一篇就够了,建议收藏
学习分布式事务Seata看这一篇就够了,建议收藏
24633 2
|
Kubernetes 调度 C++
Kubernetes vs Docker Swarm:容器编排工具的比较与选择
在当今云计算时代,容器技术的应用越来越广泛。而在众多容器编排工具中,Kubernetes和Docker Swarm是两个备受关注的竞争者。本文将深入比较这两个工具的特点、优势和劣势,帮助读者更好地选择适合自己的容器编排解决方案。
|
NoSQL Java Redis
springboot怎么使用Redisson
通过以上步骤,已经详细介绍了如何在Spring Boot项目中使用Redisson,包括添加依赖、配置Redisson、创建配置类以及使用Redisson实现分布式锁和分布式集合。Redisson提供了丰富的分布式数据结构和工具,可以帮助开发者更高效地实现分布式系统。通过合理使用这些工具,可以显著提高系统的性能和可靠性。
4170 34
|
JSON Cloud Native 中间件
导入导出框架AGEIPort(GEI)正式开源
AGEIPort 是数字供应链孵化并在阿里巴巴集团内广泛使用的一套性能卓越、稳定可靠、功能丰富、易于扩展、生态完整的数据导入导出方案,致力于帮助开发者在toB复杂业务场景下能够快速交付高性能、体验优、易维护的数据导入导出功能,如用户页面上的Excel/CSV数据文件上传和下载。 目前在阿里巴巴集团内部已有盒马、菜鸟、本地生活、阿里健康、钉钉、淘系等部门有较多使用,并成为多个技术组件的基础底座,经历多次618和双11大促考验,稳定导入导出数据300~400亿条/月。
39462 9
导入导出框架AGEIPort(GEI)正式开源
|
Dubbo 网络协议 Java
RPC框架:一文带你搞懂RPC
这篇文章全面介绍了RPC(远程过程调用)的概念、原理和应用场景,解释了RPC如何工作以及为什么在分布式系统中广泛使用,并探讨了几种常用的RPC框架如Thrift、gRPC、Dubbo和Spring Cloud,同时详细阐述了RPC调用流程和实现透明化远程服务调用的关键技术,包括动态代理和消息的编码解码过程。
RPC框架:一文带你搞懂RPC

热门文章

最新文章