ajax大数据导入的一系列问题处理
介绍:就是想实现简单的ajax上传数据,但是当数据量较大的时候,问题就一个一个接着来了,其实数据也不是很大,就是csv格式数据 不到5w条数据。大小5M,一开始认为这个很简单,就是先上传一下文件,然后读取一下,存到数据库就好了,结果,可能我比较菜,弄了半天做出这个功能。环境是linux.在整个调试过程下来,我觉找到问题点才是最重要的,但是一般当一段程序除了问题之后,我们都会觉得,这里有问题,那里有问题,其实这个时候,我们可以这样,一步一步的来测试,找到问题点在哪,这样处理问题来,就不会那样束手无策了--
遇到的问题就从先到后的一一说吧。
问题1 按照我最初的想法,先上传文件再读取文件。这里问题就来了,当文件较大的时候上传较慢,导致客户看到的操作一直处于等待状态,不人性化。
处理办法:我是这样做的,大神有更好的办法,求介绍。我先把文件上传上去,然后把文件存到一个特定的文件夹就叫 import吧 ,然后返回一个这个文件名字。这样就确保了文件是上传成功的。并且我可以在他返回名字的这一步用js 给客户一个提示。然后就是ajax去请求php读取文件,插入数据库。可是问题来了。
问题2 当我用ajax去请求php读取文件并插入数据库的时候,遇到一个问题,就是ajax请求总是在1min的时候,断掉。我一想 ,这应该是php的最大执行时间max_execution_time的原因吧,结果我修改为300秒。还是这样,那我就认为会不会是apache的 最大get时间max_input_time呢,我就在代码加一个 ini_set 结果,用ini_get 查看max_input_time,用ini_set设置无效,还是60秒,在网上查了很多资料,还是不知道为啥。有大神知道的,请给我回复下。菜鸟先谢过了。那没办法,我只能去服务器把php.ini配置修改了。经理说不让修改的,为了测试,偷偷改了--最后修改回来了。修改之后,测试,还是不行。还是到一分钟 就执行超时。真的很纳闷。不知道什么原因。求指教。那没办法。
这种办法行不通了,对一个5m的文件只能分行读取了。然后就是对代码的一通修改,分行读取是这样操作的,先ajax请求,然后每次读取2000条 然后对这2000条数据进行处理,插入数据库(文章最后介绍一个好用的分行读取函数)。然后每次ajax执行完,返回一个状态符,和本次读取到的行数,然后下次接着读。知道最后读取完。这中间还遇到一个问题:就是当我对每一行数据进行查重的时候遇到的,是这样的,我对得到的内容进行循环,然后查一下每行是否存在,当我判断$count是否大于0 的时候,当已存在的时候,我用continue,执行下一次循环。但是当我在导入10000条的时候,总是在8000条的时候报错说 服务器内部错误。很闷,不解问什么,结果只能用if else代替了。纳闷。一个小提醒:插入数据库的时候 不要一条一条的插入,最好这样 inset into aaa(`xx`,`xxx`)values('111','111'),('222','222')。这样 速度会快很多。
行号读取函数,SplFileObject这个类库真的很好用推荐。有知道我的问题的,求大神指教。
function getFileLines($filename, $startLine, $endLine, $method = 'rb'){
$content = array();
$filename = DATA_PATH.DS.'import' . DS . $filename;
$count = $endLine - $startLine;
$fp = new SplFileObject($filename, $method);
$fp->seek($startLine); // 转到第N行, seek方法参数从0开始计数
for ($ii = 0; $ii <= $count; ++$ii) {
$content[] = $fp->current(); // current()获取当前行内容
$fp->next(); // 下一行
}
return array_filter($content); // array_filter过滤:false,null,''
}
转载于:https://www.cnblogs.com/min-cj/p/ajax_import_5.html
ajax大数据导入的一系列问题处理相关推荐
- AJAX 大数据量处理
看来一篇淘宝网关于大数据量处理的解决方案的文章,感觉思路不错,确实值得学习,下面总结成自己的经验.主要是思想. 思路如下: 将大数据量数据进行分割返回,例如需要返回100条数据,我们可以通过10次请求 ...
- EasyExcel3.0.5 解决大数据导入导出,防止OOM
文章目录 前言 源码 代码实现 POM 依赖 application.yaml Application 启动类 Config 相关配置类 创建员工信息表 导入和导出实体 Controller 层 Se ...
- 大数据、云计算该如何学习?
大数据之Linux+大数据开发篇 [大数据开发学习资料领取方式]:加入大数据技术学习交流群458345782,点击加入群聊,私信管理员即可免费领取 阶段一.大数据.云计算 - Hadoop大数据开发技 ...
- 云计算和python学哪个_大数据、云计算该如何学习?
大数据之Linux+大数据开发篇 阶段一.大数据.云计算 - Hadoop大数据开发技术 课程一.大数据运维之Linux基础 本部分是基础课程,帮大家进入大数据领域打好Linux基础,以便更好地学习H ...
- 大数据可视化技术面临的挑战及应对措施
来源:科技导报 本文约5400字,建议阅读10分钟 本文介绍了适用于大数据的数据可视化技术,讨论了针对大数据可视化应用需求自主研发的交互式可视化设计平台AutoVis及其应用. [ 导读 ]本文从大数 ...
- python大数据和java大数据的区别-未来Java、大数据、Python哪个前景更好,薪资更高?...
都知道现在最火爆的是人工智能.大数据.而人工智能和大数据主要用的语言就是Java和Python.今天我们就来分析一下,当前java,python和大数据,哪个就业前景更好?自己该学哪一个? Java和 ...
- Oracle 大数据集成实施
Oracle 大数据实施架构 Oracle为广大客户提供了一个预装的用于测试和学习目的的免费大数据环境.你可以在这个环境中对Oracle大数据一体机(Big Data Appliance)上的可选软件 ...
- 小米大数据:借助Apache Kylin打造高效、易用的一站式OLAP解决方案
如今的小米不仅是一家手机公司,更是一家大数据与人工智能公司.随着小米公司各项业务的快速发展,数据中的商业价值也愈发突显.而与此同时,各业务团队在数据查询.分析等方面的压力同样正在剧增.因此,为帮助公司 ...
- 第十六期:简单的介绍一下大数据中最重要的MapReduce
MapReduce是分布式运行的,由两个阶段组成:Map和Reduce,Map阶段是一个独立的程序,有很多个节点同时运行,每个节点处理一部分数据. MapReduce执行流程图 概述 MapReduc ...
最新文章
- linux获取最高权限并取消_Linux 更新glibc 漏洞 可以获取最高权限
- 利用Java反射机制和poi插件操作excel
- Android开发进阶之NIO非阻塞包(一)
- 【项目实战】汽车金融评分卡
- PREV-3_蓝桥杯_带分数
- 识别访问端的操作系统
- 基于MFC框架下OpenGL的exe可移植
- 句句真研—每日长难句打卡Day14
- Autolayout代码实现举例-02-使用VFL
- Layui 文档(含镜像站资源)
- Linux之socket网络编程(全)
- MATLAB导出高清晰图片
- 关于win10系统cmd命令失效
- 汽车can网络分析仪汽车CAN
- kaiser密码的加密与解密
- 外参数获取推导(求坐标系转换矩阵方法)
- Jetpack Compose——Scaffold(脚手架)、SnackBar(通知,类似Toast)的简单使用
- php echo输出多了 date(): It is not safe to rely on the system‘s timezone settings
- 藏书馆显示服务器繁忙,10-基于数字化校园建设的校园一卡通.doc
- html5刮奖效果,HTML5 Canvas实战之刮奖效果
热门文章
- Linux中deb软件包管理怎么看,Deb软件包管理
- 定义入栈java_小师妹学JVM之:java的字节码byte code简介
- python将2个列表list合并到1个列表使用appenden_【新手入门】20个很实用的 Python 学习小技巧...
- 手机1像素线粗_关于移动端开发 1px 线的一些理解和解决办法
- python学习-数据类型(列表→创建、取值、大小、长度)
- 飞控所有PID参数都无法消除振荡问题
- sqlserver date类型和字符串比较_VB编程基本数据类型完整剖析
- 用户关系表 存储_如何解决oracle 19c中创建用户报错的故障
- 干货 | 双目摄像头实现手势识别,完美还原人体运动手势
- 网友怒喷运营商“为推广5G故意调慢4G网速!”官方紧急回应!