如何从我的PHP服务器生成和导出一个大的CSV文件?
我的服务器可以是PHP或nodeJS,我更喜欢呆在PHP中,但如果在node中做不到/做得更好,我将非常感谢您的回答 我想生成并导出一个非常大的CSV文件,问题是我无法一次从MySQL加载所有数据,所以目前我将数据量限制在一定程度上,这不会使应用程序崩溃,但速度很慢,大多数数据都不会导出 我想到了生成和导出CSV文件的解决方案:如何从我的PHP服务器生成和导出一个大的CSV文件?,php,mysql,node.js,csv,Php,Mysql,Node.js,Csv,我的服务器可以是PHP或nodeJS,我更喜欢呆在PHP中,但如果在node中做不到/做得更好,我将非常感谢您的回答 我想生成并导出一个非常大的CSV文件,问题是我无法一次从MySQL加载所有数据,所以目前我将数据量限制在一定程度上,这不会使应用程序崩溃,但速度很慢,大多数数据都不会导出 我想到了生成和导出CSV文件的解决方案: 向我的服务器发送1..N个调用,每个调用将生成Part1…PartN CSV,浏览器将附加它们[浏览器不会崩溃吗?] 在一个请求中,将数据流传输到浏览器,但浏览器如何开
谢谢。这是一个使用Mysql表示法的不错的解决方案:
SELECT *
INTO OUTFILE '/tmp/dbexport.csv'
FIELDS ENCLOSED BY '"'
TERMINATED BY ';'
ESCAPED BY '"'
LINES TERMINATED BY '\r\n'
FROM tables;
也看看答案
你也可以考虑使用.tSB(tab分隔文件),这对你没有什么不同:
mysql your_database -e "select * from tables" -B > export.tsv
这是一个很好的使用Mysql表示法的解决方案:
SELECT *
INTO OUTFILE '/tmp/dbexport.csv'
FIELDS ENCLOSED BY '"'
TERMINATED BY ';'
ESCAPED BY '"'
LINES TERMINATED BY '\r\n'
FROM tables;
也看看答案
你也可以考虑使用.tSB(tab分隔文件),这对你没有什么不同:
mysql your_database -e "select * from tables" -B > export.tsv
这是一个很好的答案,但我需要在将数据发送回浏览器之前处理服务器中的数据,还有其他想法吗?我不明白你的意思,这样服务器中的所有事情都会发生。结果在您的服务器中,
/tmp/
文件夹中,dbexport.csv
文件中,因此您可以在服务器中解析它。解析如此大的文件会导致内存耗尽,因为填充它的数组太大,应用程序无法容纳。为了解决这个问题,我一次只能读取部分文件,但我不需要该文件,我可以运行部分查询并处理它,保存到多个文件/附加到单个文件,然后以某种方式将其上传回客户端浏览器。如果您知道如何将200mb的文件发送到浏览器,我将不胜感激,以便解析数据小文件将有助于您的内存。然后,为了将200Mb的数据刷新到浏览器中,我认为分页最适合您。以某种方式对数据进行排序,分片发送(每次20到100个元素),然后组织请求,如/mydbcontent/?ini=0&size=100
,并将其刷新到json数据数组中。这是一个很好的答案,但我需要在服务器中处理数据,然后再将其发送回浏览器,还有其他想法吗?我不明白你的意思,这样,一切都在服务器中发生。结果在您的服务器中,/tmp/
文件夹中,dbexport.csv
文件中,因此您可以在服务器中解析它。解析如此大的文件会导致内存耗尽,因为填充它的数组太大,应用程序无法容纳。为了解决这个问题,我一次只能读取部分文件,但我不需要该文件,我可以运行部分查询并处理它,保存到多个文件/附加到单个文件,然后以某种方式将其上传回客户端浏览器。如果您知道如何将200mb的文件发送到浏览器,我将不胜感激,以便解析数据小文件将有助于您的内存。然后,为了将200Mb的数据刷新到浏览器中,我认为分页最适合您。以某种方式对数据进行排序,分片发送(每次20到100个元素),然后组织请求,如/mydbcontent/?ini=0&size=100
,并将其刷新到json数据数组中。