基于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 选项及相关信息函数库
Dec 04 PHP
php 删除记录实现代码
Mar 12 PHP
php错误、异常处理机制(补充)
May 07 PHP
php防止伪造数据从地址栏URL提交的方法
Aug 24 PHP
刷新PHP缓冲区为你的站点加速
Oct 10 PHP
使用PHP实现微信摇一摇周边红包
Jan 04 PHP
thinkPHP中验证码的简单实现方法
Dec 05 PHP
详解Yii2 定制表单输入字段的标签和样式
Jan 04 PHP
如何打开php的gd2库
Feb 09 PHP
一个实用的php验证码类
Jul 06 PHP
thinkPHP框架实现的短信接口验证码功能示例
Jun 20 PHP
PHP yield关键字功能与用法分析
Jan 03 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单例模式示例分享
2015/02/12 PHP
关于viewport,Ext.panel和Ext.form.panel的关系
2009/05/07 Javascript
JQuery 构建客户/服务分离的链接模型中Table中的排序分析
2010/01/22 Javascript
基于jquery实现的服务器验证控件的启用和禁用代码
2010/04/27 Javascript
BOM与DOM的区别分析
2010/10/26 Javascript
深入理解JavaScript系列(29):设计模式之装饰者模式详解
2015/03/03 Javascript
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
2015/03/04 Javascript
Javascript数组Array方法解读
2016/03/13 Javascript
jQuery对象与DOM对象转换方法详解
2016/05/10 Javascript
Webpack 4如何动态切割JS注入文件名详解
2019/07/09 Javascript
详解Element-UI中上传的文件前端处理
2019/08/07 Javascript
react的hooks的用法详解
2020/10/12 Javascript
微信跳一跳自动运行python脚本
2018/01/08 Python
Python Tkinter实现简易计算器功能
2018/01/30 Python
python之cv2与图像的载入、显示和保存实例
2018/12/05 Python
详解python做UI界面的方法
2019/02/27 Python
Python常用特殊方法实例总结
2019/03/22 Python
python and or用法详解
2019/06/26 Python
浅析Windows 嵌入python解释器的过程
2019/07/26 Python
python打印直角三角形与等腰三角形实例代码
2019/10/20 Python
解决pycharm 安装numpy失败的问题
2019/12/05 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
高性能钓鱼服装:Huk Gear
2019/02/20 全球购物
犹他州最古老的体育用品公司:Al’s
2020/12/18 全球购物
幼儿园保育员辞职信
2014/01/12 职场文书
单位未婚证明范本
2014/01/18 职场文书
个性婚礼策划方案
2014/05/17 职场文书
企业文化口号
2014/06/12 职场文书
村道德模范事迹材料
2014/08/28 职场文书
个人批评与自我批评材料
2014/10/17 职场文书
2015年村计划生育工作总结
2015/04/28 职场文书
2015年加油站工作总结
2015/05/13 职场文书
决心书格式及范文
2019/06/24 职场文书
nginx实现发布静态资源的方法
2021/03/31 Servers
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js