基于PHP读取TXT文件向数据库导入海量数据的方法


Posted in PHP onApril 23, 2013

有一个TXT文件,包含了10万条记录,格式如下:

列1       列2       列3   列4   列5
a    00003131    0    0    adductive#1 adducting#1 adducent#1
a    00003356    0    0    nascent#1
a    00003553    0    0    emerging#2 emergent#2
a    00003700    0.25    0    dissilient#1

……………………后面有10万条………………

需求是要导入数据库中,数据表的结构为

word_id   自动增量
word     【adductive#1 adducting#1 adducent#1】这一个TXT记录要转换为3个SQL记录
value     =第三列-第四列;如果=0,则此条记录略过不插入数据表

<?php
    $file = 'words.txt';//10W条记录的TXT源文件
    $lines = file_get_contents($file); 
    ini_set('memory_limit', '-1');//不要限制Mem大小,否则会报错 
    $line=explode("\n",$lines);
    $i=0;
    $sql="INSERT INTO words_sentiment (word,senti_type,senti_value,word_type) VALUES ";    foreach($line as $key =>$li)
    {
        $arr=explode(" ",$li); 
        $senti_value=$arr[2]-$arr[3];
        if($senti_value!=0)
        {
            if($i>=20000&&$i<25000)//分批次导入,避免失败
            {
             $mm=explode(" ",$arr[4]);                
                 foreach($mm as $m)   //【adductive#1 adducting#1 adducent#1】这一个TXT记录要转换为3个SQL记录                 {
                     $nn=explode("#",$m);
                     $word=$nn[0];
                     $sql.="(\"$word\",1,$senti_value,2),";//这个地方要注意到是 word有可能包含单引号(如jack's),因此我们要用双引号来包含word(注意转义)                       
                 }
            }
   $i++;
        }         
    }
    //echo $i;
    $sql=substr($sql,0,-1);//去掉最后一个逗号
    //echo $sql;
    file_put_contents('20000-25000.txt', $sql);  //批量导入数据库,5000条一次,大概需要40秒的样子;一次导入太多max_execution_time会不够,导致失败     
?>

1,海量数据导入到时候,要注意PHP的一些限制,可以临时调整一下,否则会报错

Allowed memory size of 33554432 bytes exhausted (tried to allocate 16 bytes)

2,PHP操作TXT文件

file_get_contents()

file_put_contents()

3,海量导入的时候,最好分批次导入,失败的几率小一些

4,海量导入之前,脚本一定要多次测试无误再使用,比如用100条数据来测试

5,导入之后,如果PHP的mem_limit还是不够的话,程序仍然跑不起来

(建议用修改php.ini的方式来提高mem_limit,而不是用临时的语句)

PHP 相关文章推荐
关于PHP中操作MySQL数据库的一些要注意的问题
Oct 09 PHP
用PHP实现的随机广告显示代码
Jun 14 PHP
Window下PHP三种运行方式图文详解
Jun 11 PHP
php后台如何避免用户直接进入方法实例
Oct 15 PHP
php.ini save_handler 修改不生效的解决办法
Jul 22 PHP
PHP实现获取某个月份周次信息的方法
Aug 11 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
Mar 21 PHP
thinkPHP批量删除的实现方法分析
Nov 09 PHP
Zend Framework过滤器Zend_Filter用法详解
Dec 09 PHP
深入理解PHP的远程多会话调试
Sep 21 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
Apr 11 PHP
PHP代码加密的方法总结
Mar 13 PHP
『PHP』PHP截断函数mb_substr()使用介绍
Apr 22 #PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
Apr 22 #PHP
怎样给PHP源代码加密?PHP二进制加密与解密的解决办法
Apr 22 #PHP
基于PHP Web开发MVC框架的Smarty使用说明
Apr 19 #PHP
PHP时间戳与日期之间转换的实例介绍
Apr 19 #PHP
php多文件上传功能实现原理及代码
Apr 18 #PHP
php实现多张图片上传加水印技巧
Apr 18 #PHP
You might like
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
Google排名中的10个最著名的 JavaScript库
2010/04/27 Javascript
jquery.post用法示例代码
2014/01/03 Javascript
JS中的构造函数详细解析
2014/03/10 Javascript
jQuery实现HTML表格单元格的合并功能
2016/04/06 Javascript
JS/jQ实现免费获取手机验证码倒计时效果
2016/06/13 Javascript
Javascript学习之谈谈JS的全局变量跟局部变量(推荐)
2016/08/28 Javascript
微信小程序 Flex布局详解
2016/10/09 Javascript
js+css3制作时钟特效
2016/10/16 Javascript
webpack入门必知必会
2017/01/16 Javascript
Node.js中.pfx后缀文件的处理方法
2017/03/10 Javascript
JavaScript之promise_动力节点Java学院整理
2017/07/03 Javascript
vue中实现滚动加载更多的示例
2017/11/08 Javascript
vue项目tween方法实现返回顶部的示例代码
2018/03/02 Javascript
js图片无缝滚动插件使用详解
2020/05/26 Javascript
解决mui框架中switch开关通过js控制开或者关状态时小圆点不动的问题
2019/09/03 Javascript
VSCode搭建Vue项目的方法
2020/04/30 Javascript
绘制微信小程序验证码功能的实例代码
2021/01/05 Javascript
python提示No module named images的解决方法
2014/09/29 Python
Python Django 添加首页尾页上一页下一页代码实例
2019/08/21 Python
基于Tensorflow批量数据的输入实现方式
2020/02/05 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
Python 列表推导式需要注意的地方
2020/10/23 Python
html5 canvas实现跟随鼠标旋转的箭头
2016/03/11 HTML / CSS
iphoneX 适配客户端H5页面的方法教程
2017/12/08 HTML / CSS
Melissa香港官网:MDreams
2016/07/01 全球购物
美国第一香水网站:Perfume.com
2017/01/23 全球购物
安全检查管理制度
2014/02/02 职场文书
应届生自荐信范文
2014/02/21 职场文书
货车司机岗位职责
2014/03/18 职场文书
工程管理英文求职信
2014/03/18 职场文书
暑假学习心得体会
2014/09/02 职场文书
社区服务理念口号
2015/12/25 职场文书
教您:房贷工资收入证明应该怎么写?
2019/08/19 职场文书
《帝国时代4》赛季预告 新增内容编译器可创造地图
2022/04/03 其他游戏