0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

EXCEL导入—设计与思考

京东云 来源:jf_75140285 作者:jf_75140285 2025-08-20 16:56 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

EXCEL导入—设计与思考

一、案例信息与设计

1.1、案例需求与背景

B2BTC同城二期有一个Excel导入的功能,单次数据量小于一千,使用频次不高。但涉及到多个字段组成唯一约束,即每条数据操作时要根据唯一性组合字段来操作,要确保数据表中的数据不违反唯一性。

每条数据涉及到多次查询其他业务RPC来校验、补充信息的诉求,即使有缓存,但也可能涉及到缓存不命中问题,即单条数据的校验和导入的时效性保障不了。



1.2、整体解决方案

以下四个方案为开发过程中依次思考的四个方案,没有绝对利弊。

1.2.1、初始构思开发方案(同步导入)

首先想到的方案为常用的同步导入,即在一台容器的一个线程中完成Excel中数据的解析、校验、导入、发送通知消息三部分流程。

问题:

1.当数据量过大时,在单台服务器上操作时对服务器造成比较大的内存压力。

2.流程比较长,每条数据涉及多次RPC查询,总体时间很长。接口TP99会比较高 + 用户体验很差。

优点:

1.可以让前端同步获取导入结果。



wKgZO2iljcSADVFTAADJIwuc8jo791.jpg



1.2.2、方案二(改进版)

由于方案一时效不可控制,在参考了另外一个Excel导入场景后设计了以下方案:

基于原有的方案,该方案使用了线程池来校验数据并通过MQ来异步地处理每条数据,这样基于原有的方案有一定的效率提升。

但由于当时思考不充分,开发完成之后发现和实际场景不适配,并可能有TP99超时风险,只作为记录。



问题:

1.业务可以结束完全的异步,所有的导入结果都通过。

优点:

1.可以让前端同步获取校验结果。

2.线程池和异步处理一定程度上提升了数据处理效率。

适用场景:

本方案适用于前端需要同步获取导入的结果,后端不涉及唯一性校验(有单号等唯一主键信息)的场景,可以校验数据之后进行批量插入(不用MQ来发消息异步处理数据)。



方案本身没有什么问题,问题在于方案和引用场景不是最佳适配:本次导入不要求前端能即时获取到导入的结果,因此无需在这里同步获取到结果之后再异步处理数据,可以将 excel解析 + 数据校验 + 处理消息统一均异步处理。

wKgZPGiljcSAZWohAAK6A6lTxEE472.jpg





1.2.3、方案三(最终版)

由于业务方没有同步获取导入结果或者校验结果的任何诉求,因此这里将 excel解析 + 数据校验 + 处理消息统一均异步处理(JMQ发消息给消费者来处理这些流程),只对必要的参数进行校验。

对于数据处理,将Excel数据拆分为每条的粒度,用 线程池来进行 数据校验并处理,最终由主线程统计结果。

此外,在进行数据 查询唯一性数据 + 操作数据(增加删除修改) 的最小并发影响粒度加上Redis锁来保障数据表的唯一性不会被破坏。



问题:

1.所有的 excel解析 + 数据校验 + 处理消息 均在一台服务器上执行,对服务器的压力会比较大。

优点:

1.用线程池处理消息,大大缩短了消息处理的时间,减少了单个服务器压力。

2.有兜底策略,可确保数据不丢失,导入流程可以正常且按时结束,不会无上限等待。

3.除必要校验的所有流程均异步处理,接口的TP99可靠且较快。

适用场景:

1.对数据完整性要求比较的业务。

2.数据量不会太大的业务。(避免对单个容器造成较大压力)

wKgZO2iljcWAZtL7AAISNa1Nvzc472.jpg





1.2.4、方案四(理想版)

对于方案三,将所有的数据校验 + 处理的流程都给一台服务器执行,造成单台服务器压力比较大,且并发度不够高,总体流程时效性可能得不到保障。因此设想了一个较为理想的方案四场景,适用于数据量大、对数据可靠性要求不高、时效性要求高的场景。

相比方案三,方案四减少了对应的对账、兜底机制,整体的流程还是异步进行。相比于线程池,用 JMQ 发送消息给 数据校验并处理的consumer来处理消息并记录结果到Redis来跟踪导入进度。此外,在进行数据 查询唯一性数据 + 操作数据(增加删除修改)+ 更新Redis中最终结果 的最小并发影响粒度加上Redis锁来保障数据表的唯一性不会被破坏。



问题:

1.没有兜底策略,数据校验处理的流程中可能出现有一条消息阻塞丢失意外结束,导致最终没有线程统计结果并发送咚咚消息。

优点:

1.除必要校验的所有流程均异步处理,接口的TP99可靠且较快。

2.利用拆分导入数据 + 多个Consumer处理消息,大大缩短了消息处理的时间。

3.拆分数据为消息异步处理,用了JMQ的重试机制来提升了数据处理的可靠性。

适用场景:

1.本方案适用于前端无需同步获取导入的结果,后端可以完全异步处理数据的场景。

2.对数据可靠性要求不是极高的业务,可接受小概率容错。

3.对导入结果失效有一定诉求的业务。

4.数据量比较大或操作比较频繁的业务。



wKgZPGiljcaAEBkuAAKCB17DGjQ355.jpg





二、持续思考

2.1 中间件的合理使用

合理利用JMQ来解耦、拆分业务逻辑可以 减少单台服务器实例内存或CPU的压力、提高数据处理并发量,同时可以利用MQ的重试机制来尽可能保障对应业务的可用性

同时,异步处理可能存在结果丢失的情况,在数据可靠性要求不高的场景可以合理舍弃这种小概率场景发生的问题(因为有重试还一直失败)。但在数据可靠性要求比较高的场景,需要有对应的对账机制 + 兜底机制来统计数据的处理情况。(如Excel导入,可以将解析完成的数据 和 最终导入的数据进行一个数据对账,如果有数据丢失或者无响应,发出告警,让定时任务 或 人工进行二次核验来确保数据可靠不丢失)

但中间件的过度使用使得服务过度依赖中间件的可靠性,问题追踪定位难度会进一步加大,需要结合实际业务场景综合权衡。

2.2 业务充分适配场景

在进行方案的技术设计时,不要只是照葫芦画瓢,要结合自己的业务场景、业务数据量、可靠性要求等场景充分考虑,借鉴其他方案的可用之处。

如本文档中方案二借鉴了之前的方案设计,但没有考虑自己的业务场景是不是与其适配,没有充分适配自己的实际业务,还可能引入新的问题。

没有最好的技术方案,只有适配于当前业务场景的最佳方案。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RPC
    RPC
    +关注

    关注

    0

    文章

    114

    浏览量

    12289
  • Excel
    +关注

    关注

    4

    文章

    231

    浏览量

    57788
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何快速导入keil的pack?

    在中国内网下通过keil下载它所支持的软件包是非常慢的, 甚至下载一天都下载不下来,下面介绍一种快速的方式(半小时内)下载并导入。 step 1 : 在浏览器中输入https
    发表于 01-16 07:01

    勤哲Excel服务器:移动办公的革新利器,显著提升企业协作效率

    随着手机、平板等移动设备的普及,众多企业开始逐步进入移动办公时代——在任何时间、任何地点,都可以高效处理工作,完全打破传统固定办公地点束缚,让工作更自由、协作更无界。 作为全球Excel服务器品类
    的头像 发表于 12-16 15:58 625次阅读

    rt-thread studio 导入BSP 失败怎么解决?

    rt-thread studio 手动导入bsp 失败。 版本: 2.2.8 构建ID: 202405200930 导入的bsp 是直接从rt-thread 代码仓库下载的 .log
    发表于 10-11 11:07

    腾讯地图在AI时代的全新思考与实践

    9月17日,在2025腾讯全球数字生态大会地图专场上,腾讯集团副总裁、腾讯智慧出行总裁钟翔平分享了腾讯地图在AI时代的全新思考与实践。
    的头像 发表于 09-18 10:32 1015次阅读

    如何将GCC项目导入NuEclipse?

    如何将GCC项目导入NuEclipse?
    发表于 09-01 07:04

    KiCad 已支持导入 Altium 工程(Project)

    “  9.0.3 的小版本更新中增加一个非常实用的功能:直接导入 Altium 的工程,省去了分别导入原理图和 PCB 的麻烦。  ”   Altium 导入器 从  8.0 开始,KiCad
    的头像 发表于 07-21 11:15 3616次阅读
    KiCad 已支持<b class='flag-5'>导入</b> Altium 工程(Project)

    树莓派用户必备的五大微软Excel替代软件!

    微软Excel通常是处理XLS、XLSX或CSV等电子表格时首先考虑的工具。然而,由于它对ARM处理器和Linux操作系统缺乏原生支持,在树莓派上使用微软Excel颇具挑战性。但这并不意味着没有好
    的头像 发表于 07-17 17:17 1113次阅读
    树莓派用户必备的五大微软<b class='flag-5'>Excel</b>替代软件!

    Allegro Skill工艺辅助之导入叠层模板

    在PCB设计中,导入叠层模板能够确保设计的标准化和规范化,避免因手动设置叠层参数而可能出现的错误或不一致情况。
    的头像 发表于 07-10 17:10 3504次阅读
    Allegro Skill工艺辅助之<b class='flag-5'>导入</b>叠层模板

    使用Word/Excel管理需求的10个痛点及解决方案Perforce ALM

    还在用Word/Excel做需求管理?10个“翻车信号”,都是小伙伴们踩过的坑~来看看你踩过哪些?是不是也该升级到更专业的ALM工具了~
    的头像 发表于 07-10 15:59 773次阅读
    使用Word/<b class='flag-5'>Excel</b>管理需求的10个痛点及解决方案Perforce ALM

    Allegro Skill字符功能之导入LOGO

    在完成PCB设计之后,常常会遇到需要在PCB板上展示公司标志或者导入设计中需要的logo图片的情况。为了满足这一需求,FanySkill特别提供了“导入LOGO”这一便捷功能。通过这个功能,用户可以轻松地将logo图片放置到PCB设计中,从而快速实现将公司标识或其他设计元
    的头像 发表于 07-07 17:05 2196次阅读
    Allegro Skill字符功能之<b class='flag-5'>导入</b>LOGO

    如何导出Excel文件 -- excel_hm介绍 ##三方SDK##

    导出的三方库吧 首先要思考一下原理:excel并不像html网页或者txt文件一样,可以通过直接编辑内容指定一个文件格式来生成文件,如果我们对一个excel文件右键通过记事本打开的话,你会发现一堆乱码
    发表于 06-30 17:57

    Simcenter FLOEFD EDA Bridge模块:使用导入的详细PCB设计和IC热特性来简化热分析

    优势使用导入的详细PCB设计和集成电路热特性进行分析,省时省力将详细的PCB数据快速导入SimcenterFLOEFD通过更详细的电子设备热建模提高分析精度摘要SimcenterFLOEFD软件
    的头像 发表于 06-10 17:36 2037次阅读
    Simcenter FLOEFD EDA Bridge模块:使用<b class='flag-5'>导入</b>的详细PCB设计和IC热特性来简化热分析

    VirtualLab Fusion应用:振幅型SLM图片的导入

    1.打开File→Import→Import Image File 2.选择图片格式的文件,点击打开 3.选择导入的类型为Harmonic Filed: 4.选择目标图片的显示颜色,一般保持
    发表于 06-03 08:49

    EZ USB Suite导入官方例程报错是怎么回事?

    导入官网固件工程报错,如下图,添加了路径也不行,不知道咋回事,具体应该导入哪些头文件,在哪个位置
    发表于 05-20 08:22

    CoT 数据集如何让大模型学会一步一步思考

    目前,大模型的回答路径基本遵循 input-output 的方式,在面对复杂任务时表现不佳。反之,人类会遵循一套有条理的思维流程,逐步推理得出正确答案。这种差异促使人们深入思考:如何才能让大模型“智能涌现”,学会像人类一样“一步一步思考”?
    的头像 发表于 04-24 16:51 1557次阅读
    CoT 数据集如何让大模型学会一步一步<b class='flag-5'>思考</b>?