V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zero3412
V2EX  ›  PHP

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

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


    GPT 的回复
    在比较 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  
       47 天前   ❤️ 2
    流式处理
    没有其他黑魔法。
    brader
        2
    brader  
       47 天前
    > 而使用如框架 thinkphp 导出相同数据时,就必须要使用分页或其它方法,否者会引起超时或内存不足等乱七八糟的问题;
    如果使用原生 PHP 会比框架要好些,但依然没有 phpMyAdmin 那么丝滑。

    当你说这个时,我就盲猜你的导出代码没有使用流式输出的实现。
    来,贴段你的导出代码来评价
    ipwx
        3
    ipwx  
       47 天前
    Transfer-Encoding: chunked
    zero3412
        4
    zero3412  
    OP
       47 天前
    @brader 哈哈哈,确实没用到这个流式输出
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   949 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 19:43 · PVG 03:43 · LAX 12:43 · JFK 15:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.