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

352 天前
 longmeier90
数据库:mysql
架构: 前后端分离、vue+python

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

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

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

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

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

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

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

© 2021 V2EX