基于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 文件上传进度条的两种实现方法的代码
Nov 25 PHP
Apache 配置详解(最好的APACHE配置教程)
Jul 04 PHP
PHP中的strtr函数使用介绍(str_replace)
Oct 20 PHP
MySQL 日期时间函数常用总结
Jun 12 PHP
浅谈php serialize()与unserialize()的用法
Jun 05 PHP
手把手教你打印出PDF(关于fpdf的简单应用)
Jun 25 PHP
php调用C代码的实现方法
Mar 11 PHP
php正则匹配html中带class的div并选取其中内容的方法
Jan 13 PHP
php面向对象值单例模式
May 03 PHP
PHP单元测试框架PHPUnit用法详解
Jan 23 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 PHP
thinkphp 获取控制器及控制器方法
Apr 16 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
写一个用户在线显示的程序
2006/10/09 PHP
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
用php简单实现加减乘除计算器
2014/01/06 PHP
PHP中feof()函数实例测试
2014/08/23 PHP
PHP实现的猴王算法(猴子选大王)示例
2018/04/30 PHP
laravel 操作数据库常用函数的返回值方法
2019/10/11 PHP
ASP小贴士/ASP Tips javascript tips可以当桌面
2009/12/10 Javascript
用jquery ajax获取网站Alexa排名的代码
2009/12/12 Javascript
Jqgrid表格随窗口大小改变而改变的简单实例
2013/12/28 Javascript
jquery获取一个元素下面相同子元素的个数代码
2014/07/31 Javascript
一个js过滤空格的小函数
2014/10/10 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
初步认识JavaScript函数库jQuery
2015/06/18 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
jQuery窗口拖动功能的实现代码
2017/02/04 Javascript
angular 动态组件类型详解(四种组件类型)
2017/02/22 Javascript
jQuery插件zTree实现的多选树效果示例
2017/03/08 Javascript
VueJS组件之间通过props交互及验证的方式
2017/09/04 Javascript
fetch 如何实现请求数据
2018/12/20 Javascript
koa+mongoose实现简单增删改查接口的示例代码
2019/05/13 Javascript
JS实现使用POST方式发送请求
2019/08/30 Javascript
vue自动添加浏览器兼容前后缀操作
2020/08/13 Javascript
virtualenv实现多个版本Python共存
2017/08/21 Python
简单实现python数独游戏
2018/03/30 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
Python中常用的8种字符串操作方法
2019/05/06 Python
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
解决方案设计综合面试题
2015/08/31 面试题
大学毕业生通用自我评价
2014/01/05 职场文书
给老婆的搞笑检讨书
2014/01/12 职场文书
酒后驾车标语
2014/06/30 职场文书
意外伤害赔偿协议书
2014/09/16 职场文书
2014年物业公司工作总结
2014/11/22 职场文书
Python 多线程处理任务实例
2021/11/07 Python
Python 恐龙跑跑小游戏实现流程
2022/02/15 Python
数据设计之权限的实现
2022/08/05 MySQL