数据量大,导出特别慢有什么好的优化的办法吗?

2023-05-12 18:15:19 +08:00
 longmeier90
数据库:mysql
架构: 前后端分离、vue+python

场景: 页面查询,导出 几十万行数据.
痛点: 导出慢、等待时间长,经常性页面提示 502.

我想的是用 rabbitmq+celery 异步处理的方式来优化。
2610 次点击
所在节点    Python
14 条回复
whoosy
2023-05-12 18:20:08 +08:00
做成后台任务的形式
xiaoHuaJia
2023-05-12 18:48:55 +08:00
采用异步任务,在采用多线程处理数据
ClericPy
2023-05-12 20:25:04 +08:00
先 trace 一下哪儿慢啊... 几十万行你放的超大 text 么, 我导出几百万也就几秒的事

另: 页面查询导出策略一般都很少用同步模型吧, 几乎都是返回一个 task id 然后等 ready 以后把文件地址给出来下载... 502 感觉是你查询太久了, 不然已经产生流量不太会 502, 顶多 60 秒把 nginx 默认超时给弄起来
jorneyr
2023-05-12 20:25:28 +08:00
调用数据库客户端直接执行命令导出。
findlisa
2023-05-12 20:36:32 +08:00
之前做过,后台线程池异步就行了,导出文件上传到服务器,加个文件下载界面,查询语句优化下,500W 我都导出过
taogen
2023-05-12 20:46:06 +08:00
数据量大,不建议实时下载
wuwukai007
2023-05-12 21:37:14 +08:00
做一个下载中心
chi1st
2023-05-12 21:47:15 +08:00
异步,文件上传到对象存储
dode
2023-05-12 22:05:19 +08:00
写成 excel ,带压缩功能,几十万也轻松
crazyweeds
2023-05-13 00:26:16 +08:00
两个方案:
1.技术方案:数据可以做分页处理(需要考虑排序稳定性),分而治之,拿到流后就能快速写入,写完了再撒手。
2.业务方案:每次导出创建一个任务后台执行,前端页面提供任务查询,完成后提供下载。(比较推荐,稳定又靠谱,但是如果真是巨量的话,需要考虑服务端内存以及限制客户端并发,避免 OOM )
opengps
2023-05-13 09:26:00 +08:00
这么大的数据量,一般方案并不是实实下载,往往采用生成后短信或者邮箱或者站内信通知下载链接已准备完成
cz5424
2023-05-13 11:50:01 +08:00
rabbitmq+celery 异步处理是的,加个轮询告诉客户导出完成,或者邮件通知
Andrew1996
2023-05-14 19:30:32 +08:00
异步 多线程 亲测一百万一分钟左右
sunmlight
2023-05-16 10:58:51 +08:00
几十万数据量的导出算不上大数据量。可以使用流式逐条导出为 csv 格式

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/939595

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX