推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
longmeier90
V2EX  ›  Python

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

  •  
  •   longmeier90 · May 12, 2023 · 3802 views
    This topic created in 1271 days ago, the information mentioned may be changed or developed.
    数据库:mysql
    架构: 前后端分离、vue+python

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

    我想的是用 rabbitmq+celery 异步处理的方式来优化。
    14 replies  •  2023-05-16 10:58:51 +08:00
    whoosy
    whoosy
    May 12, 2023
    1
    做成后台任务的形式
    xiaoHuaJia
    xiaoHuaJia
    May 12, 2023 via iPhone
    2
    采用异步任务,在采用多线程处理数据
    ClericPy
    ClericPy
    May 12, 2023
    3
    先 trace 一下哪儿慢啊... 几十万行你放的超大 text 么, 我导出几百万也就几秒的事

    另: 页面查询导出策略一般都很少用同步模型吧, 几乎都是返回一个 task id 然后等 ready 以后把文件地址给出来下载... 502 感觉是你查询太久了, 不然已经产生流量不太会 502, 顶多 60 秒把 nginx 默认超时给弄起来
    jorneyr
    jorneyr
    May 12, 2023
    4
    调用数据库客户端直接执行命令导出。
    findlisa
    findlisa
    May 12, 2023
    5
    之前做过,后台线程池异步就行了,导出文件上传到服务器,加个文件下载界面,查询语句优化下,500W 我都导出过
    taogen
    taogen
    May 12, 2023
    6
    数据量大,不建议实时下载
    wuwukai007
    wuwukai007
    May 12, 2023
    7
    做一个下载中心
    chi1st
    chi1st
    May 12, 2023
    8
    异步,文件上传到对象存储
    dode
    dode
    May 12, 2023
    9
    写成 excel ,带压缩功能,几十万也轻松
    crazyweeds
    crazyweeds
    May 13, 2023
    10
    两个方案:
    1.技术方案:数据可以做分页处理(需要考虑排序稳定性),分而治之,拿到流后就能快速写入,写完了再撒手。
    2.业务方案:每次导出创建一个任务后台执行,前端页面提供任务查询,完成后提供下载。(比较推荐,稳定又靠谱,但是如果真是巨量的话,需要考虑服务端内存以及限制客户端并发,避免 OOM )
    opengps
    opengps
    May 13, 2023 via Android
    11
    这么大的数据量,一般方案并不是实实下载,往往采用生成后短信或者邮箱或者站内信通知下载链接已准备完成
    cz5424
    cz5424
    May 13, 2023
    12
    rabbitmq+celery 异步处理是的,加个轮询告诉客户导出完成,或者邮件通知
    Andrew1996
    Andrew1996
    May 14, 2023 via iPhone
    13
    异步 多线程 亲测一百万一分钟左右
    sunmlight
    sunmlight
    May 16, 2023
    14
    几十万数据量的导出算不上大数据量。可以使用流式逐条导出为 csv 格式
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4452 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 66ms · UTC 05:46 · PVG 13:46 · LAX 21:46 · JFK 00:46
    ♥ Do have faith in what you're doing.