今天来总结一下解决了下载16万条数据到csv文件的问题。主要是消费报表,用于财务对账,需要下载成excel文件,我们是下载成.csv文件,遇到数据量大的商家,一个月的消费数据超过15万条,经常就下载进度到99%卡住 ,其实后台已经报错500或者504。
今天彻底解决了下载15万8千多条数据不成功的问题,当然之前还出现过内存溢出的问题,后来找到瓶颈,优化了代码,解决了内存溢出的问题。
以前的代码是将数据库取的2万条数据没按分页取,直接一下子取出来,然后将数据拼装成csv文件所需要的整块的data,也就是不是逐行写入,第一次浪费内存是在将数据存放在array中,第二次浪费内存是将数据拼装成array再往csv文件中写,所以内存溢出。优化方案是扩大php内存,然后优化代码,php默认的内存128M太小,相对于下载20w条数据的业务来说,所以内存扩大到1G。代码优化方案:将取数据改成分页取,每10000条取一次,然后foreach这一万条数据,一边拼装一边往csv文件中写,fputcsv($fp, $row); 这样优化以后, 下载8万条数据不会报内存溢出。
将下载这个特殊的action的内存扩大,
ini_set('memory_limit', '1G');//将内存最大限制改为1G
之后就不再出现内存溢出了,但是数据量在11万条以上时,仍然下载不成功,查日志发现是PHP Fatal error: Maximum execution time of 30 seconds exceeded in /xx/xx 目录,所以解决办法是在这个下载的action里前面加上一句:
set_time_limit(0);//不设置超时时间
然后再执行下载,发现php里不再报错,但是页面端返回504超时。在页面的response里能看到提示的是nginx报错,去nginx日志里查,果然有Fatal的错误:
2017/10/31 15:25:03 [error] 15639#0: *696311 upstream timed out (110: Connection timed out) 。
然后找到运维同事,帮忙修改一下服务器nginx的配置,反向代理超时,下载15万8千多条数据成功。
修改配置就是:
NGINX反向代理的超时报错,解决方法:
server {
listen *:80;
location ~ .*\.(php|php5)?$
{
fastcgi_pass 127.0.0.1:9001;
fastcgi_index index.php;
fastcgi_read_timeout 200;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
}
生效的主要就是那个fastcgi_read_timeout时间。改成了200,测试下载158500条数据没问题。
相关推荐
百万数据csv文件,用来做程序测试
CSV文件(Comma Separated Values)是一种常见的数据存储格式,广泛用于数据交换和数据分析任务。它的特点是使用逗号作为字段分隔符,每一行代表一个记录,每列数据对应一个特定的属性。在本场景中,“CSV文件数据...
从雅虎金融上面自动下载csv文件,供量化和分析使用 修改save_path为自己的本地地址,输入股票代码,即可下载。
该数据来自某交易平台的二手车交易记录,总数据量超过40w,...为了保证比赛的公平性,将会从中抽取15万条作为训练集,5万条作为测试集A,5万条作为测试集B,同时会对name、model、brand和regionCode等信息进行脱敏。
CSV文件以纯文本形式存储数据,每一行代表一条记录,各字段之间由逗号分隔。有时,如果字段内含有逗号,会使用引号进行包围。这种格式使得CSV文件可以被多种数据分析工具,如Excel、Python的Pandas库、R语言等轻松...
CSV文件是以逗号分隔的数据值,每一行代表一条记录,每个字段之间用逗号隔开。如果字段中包含逗号或其他特殊字符,通常会用双引号括起来。例如: ``` "姓名","年龄","城市" "张三",30,"北京" "李四",25,"上海" ``` ...
Java 使用 JDBC 将数据库数据导出到 CSV 文件 Java 是一种广泛使用的编程语言,它提供了多种方式来处理数据库数据,而 JDBC(Java Database Connectivity)是 Java 中连接数据库的标准 API 之一。将数据库数据导出...
本示例“C#数据存储到本地CSV文件Demo”聚焦于如何使用C#来处理CSV(逗号分隔值)文件,这种文件格式常用于数据交换,因为它简单且易于读写。CSV文件以其文本格式存储表格数据,每行代表一行记录,列之间通过逗号...
由于在学习numpy数据分析的时候没有csv类型文件,又懒得自己一个个敲字,便想来csdn里随便下载一个。然而......居然要钱啊!!!!!!!我没钱,所以自己写了个,我不要你们的钱,麻烦各位拿资源的时候吱一声,这是...
纯JavaScript实现生成并下载CSV文件,前端竟然可以生成CSV文件,感兴趣的可以看下如何生成CSV文件,并且下载。
在PHP中处理CSV(Comma Separated Values)文件是一项常见的任务,特别是在数据导入、导出或数据分析场景下。CSV文件以其简洁的格式和广泛的兼容性而受到青睐。本篇文章将详细探讨如何使用PHP来读取和操作CSV文件,...
在这个场景下,我们关注的是如何从CSV(Comma Separated Values)文件中读取特定数据,并将其保存到TXT文件中。CSV是一种常见的文件格式,用于存储表格数据,如电子表格或数据库,以纯文本形式方便交换。下面将详细...
标题中的"beijing-CSV格式天气数据.zip"表明这是一个压缩文件,其中包含了关于北京的天气数据,而数据是以CSV(Comma-Separated Values)格式存储的。CSV是一种常见的数据交换格式,它允许用户用逗号分隔的方式来...
本例中提供的"点云数据.csv"文件包含了x,y,z三个坐标轴的数值,分别代表点在三维空间中的位置。每一行数据代表一个点,多行数据组合起来就形成了一个三维形状,这里是一个大象的形状。通过解析并加载这些数据,...
在我们需求中需要读取一个csv文件的数据,但是只有旧的csv的几列数据再新写入一个csv文件,而且在旧的数据有空的数据,需要判断旧的csv的空值。可能写的存在不完善!但是应用的需求里面还是能用的
本实例提供的解决方案可能是利用流式处理(Streaming)或者迭代器(Iterator)来逐条读取数据库中的数据,然后将每条数据转化为CSV格式并写入文件。这样,内存只需要保持较小的数据量,避免了一次性加载所有数据导致...
在PHP中生成CSV文件是一项常见的任务,特别是在数据导出、报表生成或数据分析的场景下。CSV(Comma Separated Values)格式是一种通用的数据交换格式,因其简单性和易读性而广受欢迎。以下将详细介绍如何使用PHP来...
在IT行业中,处理数据是日常任务之一,而CSV(Comma Separated Values)文件因其简单易用、跨平台兼容性好而广泛应用于数据交换。本教程将深入探讨如何使用Java在Eclipse集成开发环境中读取CSV文件中的指定行和列...
js生成csv文件下载
数据挖掘、数据统计、数据库应用甚至练习表格操作均可,CSV格式绿色环保,可转文本可转表格,易于操作,4.2w条数据,来源于生活,更便于统计,更容易发现数据规律(我自己只找过两三个指标)。 数据字段:顾客编号 ...