基于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 随机生成10位字符代码
Mar 26 PHP
Windows Apache2.2.11及Php5.2.9-1的安装与配置方法
Jun 08 PHP
php 在文件指定行插入数据的代码
May 08 PHP
php简单对象与数组的转换函数代码(php多层数组和对象的转换)
May 18 PHP
ThinkPHP采用原生query实现关联查询left join实例
Dec 02 PHP
Web程序工作原理详解
Dec 25 PHP
php通过function_exists检测函数是否存在的方法
Mar 18 PHP
学习php设计模式 php实现状态模式
Dec 07 PHP
php微信公众号js-sdk开发应用
Nov 28 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
PHP实现正则匹配所有括号中的内容
Jun 22 PHP
PHP获取类私有属性的3种方法
Sep 10 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
长波有什么东西
2021/03/01 无线电
PHP实现多条件查询实例代码
2010/07/17 PHP
jQuery 页面载入进度条实现代码
2009/02/08 Javascript
JavaScript判断窗口是否最小化的代码(跨浏览器)
2010/08/01 Javascript
jQuery判断指定id的对象是否存在的方法
2015/05/22 Javascript
JS实现的仿淘宝交易倒计时效果
2015/11/27 Javascript
原生JavaScript实现异步多文件上传
2015/12/02 Javascript
switch语句的妙用(必看篇)
2016/10/03 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
2016/10/05 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
2017/03/24 jQuery
Windows下快速搭建NodeJS本地服务器的步骤
2017/08/09 NodeJs
inner join 内联与left join 左联的实例代码
2017/09/18 Javascript
浅谈Angular 中何时取消订阅
2017/11/22 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
vue下使用nginx刷新页面404的问题解决
2019/08/02 Javascript
解决vue 子组件修改父组件传来的props值报错问题
2019/11/09 Javascript
解决vue打包报错Unexpected token: punc的问题
2020/10/24 Javascript
Python字符串逐字符或逐词反转方法
2015/05/21 Python
Python易忽视知识点小结
2015/05/25 Python
python进行文件对比的方法
2018/12/24 Python
python 如何调用 dubbo 接口
2020/09/24 Python
selenium携带cookies模拟登陆CSDN的实现
2021/01/19 Python
html5 兼容IE6结构的实现代码
2012/05/14 HTML / CSS
HTML5梦幻之旅——炫丽的流星雨效果实现过程
2013/08/06 HTML / CSS
Nike加拿大官网:Nike.com (CA)
2019/04/09 全球购物
体育教师工作总结的自我评价
2013/10/10 职场文书
高三自我鉴定怎么写
2013/10/19 职场文书
村抢险救灾方案
2014/05/09 职场文书
文明演讲稿范文
2014/05/12 职场文书
法律系毕业生求职信
2014/05/28 职场文书
团队拓展活动方案
2014/08/28 职场文书
刘公岛导游词
2015/02/05 职场文书
春节随笔
2015/08/15 职场文书
村官2015年度工作总结
2015/10/14 职场文书
用javascript制作qq注册动态页面
2021/04/14 Javascript
Java实现多文件上传功能
2021/06/30 Java/Android