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