phpMyAdmin 导出 csv 性能为什么感觉强于 PHP 手写导出 csv - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zero3412
V2EX    PHP

phpMyAdmin 导出 csv 性能为什么感觉强于 PHP 手写导出 csv

  •  
  •   zero3412 2024-07-31 10:17:14 +08:00 2664 次点击
    这是一个创建于 437 天前的主题,其中的信息可能已经有所发展或是发生改变。
    phpMyAdmin 导出小于 100M 左右的 CSV 时,感觉轻轻松松,点击之后基本就能生成文件并下载;
    而使用如框架 thinkphp 导出相同数据时,就必须要使用分页或其它方法,否者会引起超时或内存不足等乱七八糟的问题;
    如果使用原生 PHP 会比框架要好些,但依然没有 phpMyAdmin 那么丝滑。


    GP 的回复
    在比较 phpMyAdmin 导出 CSV 的性能与用 PHP 手写导出 CSV 时,以下几点可能解释了为什么 phpMyAdmin 的性能更好:

    优化和效率:
    phpMyAdmin 是一个成熟的工具,专门设计用于与 MySQL 数据库交互。它在处理大数据集时进行了很多优化,使得导出操作更高效。
    手写的 PHP 脚本可能没有进行类似的优化,尤其是如果没有充分考虑内存管理和数据库查询的效率。

    使用 LOAD DATA:
    在导出 CSV 文件时,phpMyAdmin 可以使用 MySQL 的 LOAD DATA 功能,这比 PHP 手写代码更高效

    数据库查询优化:
    phpMyAdmin 在执行查询时可能使用了一些最佳实践,例如分页查询以避免内存溢出。
    手写的 PHP 脚本如果没有适当的查询优化,可能会导致性能瓶颈,尤其是在处理大数据集时。

    内存管理:
    phpMyAdmin 可能使用了流式处理( streaming )技术,即逐行读取数据并写入 CSV 文件,从而降低内存占用。
    如果手写的 PHP 脚本一次性读取大量数据并存储在内存中,再进行写入操作,内存消耗会非常高,导致性能下降。

    文件处理:
    phpMyAdmin 可能使用了更高效的文件写入方式,例如使用内置的函数进行批量写入。
    手写的 PHP 脚本如果使用的是逐行写入且没有进行缓冲操作,会导致 I/O 操作频繁,从而影响性能。

    错误处理和重试机制:
    phpMyAdmin 内置了错误处理和重试机制,可以在出现错误时有效地处理和恢复,从而保证导出过程的顺利进行。
    手写的 PHP 脚本如果没有完善的错误处理机制,在出现错误时可能会中断导出过程,导致性能不稳定。
    缓存机制:

    phpMyAdmin 可能利用了缓存机制来提高数据读取和写入的效率。
    手写的 PHP 脚本如果没有使用缓存,数据的读写效率可能会较低。
    总结来说,phpMyAdmin 在导出 CSV 的过程中,利用了很多性能优化技术和最佳实践,使得其导出性能优于一般的手写 PHP 脚本。如果希望提高手写 PHP 脚本的导出性能,可以参考 phpMyAdmin 的一些优化策略和技术。
    4 条回复    2024-07-31 11:29:32 +08:00
    niubilewodev
        1
    niubilewodev  
       2024-07-31 11:14:30 +08:00   2
    流式处理
    没有其他黑魔法。
    brader
        2
    brader  
       2024-07-31 11:15:22 +08:00
    > 而使用如框架 thinkphp 导出相同数据时,就必须要使用分页或其它方法,否者会引起超时或内存不足等乱七八糟的问题;
    如果使用原生 PHP 会比框架要好些,但依然没有 phpMyAdmin 那么丝滑。

    当你说这个时,我就盲猜你的导出代码没有使用流式输出的实现。
    来,贴段你的导出代码来评价
    ipwx
        3
    ipwx  
       2024-07-31 11:22:25 +08:00
    Transfer-Encoding: chunked
    zero3412
        4
    zero3412  
    OP
       2024-07-31 11:29:32 +08:00
    @brader 哈哈哈,确实没用到这个流式输出
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1203 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 17:28 PVG 01:28 LAX 10:28 JFK 13:28
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86