通过 report 工具 中的 excel标记属性 导入 excel文件,上传和提交出现卡死状态

楼主
我是社区第763938位番薯,欢迎点我头像关注我哦~

目前有一个需求场景:

我们需要通过report工具进行导入excel外部数据,导入的方式是通过excel标记导入进行导入的。

但是在导入外部数据的过程中,发现导入6万条数据明细,在导入过程中就出现了卡顿,甚至在提交的过程中 非常慢,非常 卡顿。

想请教一下大家,是否有更好的导入excel的方式 能解决大数据量(比如一次性可能导入10万甚至更多)上传和提交卡顿的问题那

谢谢大家了。

分享扩散:

沙发
发表于 2025-5-21 17:29:47

回帖奖励 +1

这是一个典型的大数据量 Excel 导入性能问题。你当前使用的是 Excel 标记导入(如帆软、报表工具等) 的方式,它虽然直观、便捷,但并不适合一次性导入大量数据(如 6 万到 10 万条),主要瓶颈在以下几个方面:

❗ 问题本质分析
客户端解析性能瓶颈:Excel 标记导入通常依赖前端加载并解析 Excel 内容,当数据量太大时,浏览器内存和 JS 执行效率成为瓶颈。

网络传输耗时:整个 Excel 文件需要一次性上传,文件大了容易卡死甚至失败。

服务端校验 & 插入逻辑复杂:可能每条数据都触发一系列校验、关联查询或插入逻辑,效率低。

数据库批量写入效率不佳:如果导入逻辑是逐条写入数据库而不是批量写入(如 INSERT ... VALUES (...) 多条拼接或 BULK INSERT),效率会非常低。

事务处理负载大:导入过程如果绑定在一个事务中,越到后面越慢,甚至出现锁表或等待。

✅ 建议的解决方案(推荐按场景组合使用)
✅ 方案一:使用后端接口批量导入(推荐)
步骤:

前端上传 Excel 文件,仅传文件,不做解析。

后端使用库(如 Apache POI、EasyExcel)解析 Excel 文件。

分批读取数据(如每批 1000 条),进行校验、缓存,再批量插入数据库。

提交后异步返回导入结果。

优点:

避免前端卡顿。

后端控制逻辑更灵活,可限流、并发优化。

支持非常大的数据量导入(>10万条没问题)。

✅ 方案二:将 Excel 转为 CSV 后使用数据库工具导入
将 Excel 转换为 .csv,再通过数据库原生导入方式(如 SQL Server 的 bcp,MySQL 的 LOAD DATA INFILE)导入。

适用前提:

数据清洗格式比较标准。

导入字段和结构已确定,导入权限已开放。

✅ 方案三:拆分导入
将一次导入的大 Excel 拆分为每个 1~2 万条的小 Excel,多次导入,避免单次上传压力过大。

✅ 方案四:异步导入 + 队列
上传后放入数据库临时表或中间缓存表,然后后台异步通过任务或消息队列去正式导入。

🔧 技术建议
操作点        建议优化
Excel 格式        避免合并单元格、复杂公式、颜色等格式,简化结构
服务端逻辑        使用批量插入,如 MyBatis 的 batchInsert,JDBC 的 addBatch()
校验方式        先整体缓存入内存或临时表,再集中校验,提高性能
事务控制        分批事务提交(每 1000 条提交一次),避免全表事务
提交方式        提交操作设为“异步提交”按钮,导入结果后台通知

✅ 案例参考
帆软报表用户通常在导入数据 >2 万条时,都推荐采用“服务端上传 + 后台解析”的插件模式。

企业中台项目中,大批量数据上传一般都走“Excel 文件上传 → 后台拆分校验 → 队列导入 → 导入日志记录”。

结论
导入方式        性能        易用性        推荐场景
Excel 标记导入        ❌差(>2万卡顿)        ✅高        小数据量临时导入
后端解析Excel        ✅好(>10万)        ✅中        中大型数据导入
CSV+原生导入        ✅极好        ❌低        稳定格式、批处理
异步队列导入        ✅极好        ✅中        定期或持续大批量导入
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

2回帖数 1关注人数 532浏览人数
最后回复于:6 天前

返回顶部 返回列表