基于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-accelerator网站加速PHP缓冲的方法
Jul 30 PHP
php 删除无限级目录与文件代码共享
Nov 22 PHP
PHP 小心urldecode引发的SQL注入漏洞
Oct 27 PHP
PHP类的静态(static)方法和静态(static)变量使用介绍
Feb 19 PHP
修改PHP的memory_limit限制的方法分享
Feb 21 PHP
PHPMailer邮件发送的实现代码
May 04 PHP
php生成扇形比例图实例
Nov 06 PHP
PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
Apr 10 PHP
PHP简单实现数字分页功能示例
Aug 24 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
Nov 04 PHP
PHP依赖注入原理与用法分析
Aug 21 PHP
PHP文件后缀不强制为.php方法
Mar 31 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如何解决网站大流量与高并发的问题
2011/06/25 PHP
php利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
Yii框架参数配置文件params用法实例分析
2019/09/11 PHP
jQuery autocomplete插件修改
2009/04/17 Javascript
学习ExtJS border布局
2009/10/08 Javascript
ExtJs3.0中Store添加 baseParams 的Bug
2010/03/10 Javascript
JS的document.all函数使用示例
2013/12/30 Javascript
Javascript 按位取反运算符 (~)
2014/02/04 Javascript
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
原生JS实现图片无缝滚动方法(附带封装的运动框架)
2017/10/01 Javascript
javascript原生封装一个淡入淡出效果的函数测试实例代码
2018/03/19 Javascript
vue-cli3.0配置及使用注意事项详解
2018/09/05 Javascript
浅谈Vue SSR中的Bundle的具有使用
2019/11/21 Javascript
Vue如何基于es6导入外部js文件
2020/05/15 Javascript
[02:14]完美“圣”典2016风云人物:xiao8专访
2016/12/01 DOTA
python中lambda与def用法对比实例分析
2015/04/30 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
2018/05/29 Python
浅谈numpy生成数组的零值问题
2018/11/12 Python
Python函数参数匹配模型通用规则keyword-only参数详解
2019/06/10 Python
对python 树状嵌套结构的实现思路详解
2019/08/09 Python
Python之数据序列化(json、pickle、shelve)详解
2019/08/30 Python
基于Python批量生成指定尺寸缩略图代码实例
2019/11/20 Python
世界著名的顶级牛排:Omaha Steak(奥马哈牛排)
2016/09/20 全球购物
美国百年历史早餐食品供应商:Wolferman’s
2017/01/18 全球购物
税务专业毕业生自荐信
2013/11/10 职场文书
自我评价是什么
2014/01/04 职场文书
中餐厅经理岗位职责
2014/04/11 职场文书
党的群众路线教育实践活动总结报告
2014/07/03 职场文书
业绩倒数第一的检讨书
2014/09/24 职场文书
银行业务授权委托书
2014/10/10 职场文书
村党的群众路线教育实践活动总结材料
2014/10/31 职场文书
2019年员工旷工保证书!
2019/06/28 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书
解析Redis Cluster原理
2021/06/21 Redis
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
2021/08/30 Python
oracle索引总结
2021/09/25 Oracle