V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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 · 2023-05-12 18:15:19 +08:00 · 2565 次点击
    这是一个创建于 562 天前的主题,其中的信息可能已经有所发展或是发生改变。
    数据库:mysql
    架构: 前后端分离、vue+python

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

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

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