基于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 28 PHP
初品cakephp 入门基础
Feb 16 PHP
PHP生成sitemap.xml地图函数
Nov 13 PHP
php动态生成版权所有信息的方法
Mar 24 PHP
php实现插入数组但不影响原有顺序的方法
Mar 27 PHP
php获取twitter最新消息的方法
Apr 14 PHP
php微信公众平台交互与接口详解
Nov 28 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
Mar 25 PHP
PHP和MYSQL实现分页导航思路详解
Apr 11 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
PHP 爬取网页的主要方法
Jul 13 PHP
Laravel使用scout集成elasticsearch做全文搜索的实现方法
Nov 30 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
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
2007/01/15 PHP
PHP伪静态写法附代码
2008/06/20 PHP
apache+codeigniter 通过.htcaccess做动态二级域名解析
2012/07/01 PHP
php ImageMagick windows下安装教程
2015/01/26 PHP
php自动载入类用法实例分析
2016/06/24 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
基于PHP实现生成随机水印图片
2020/12/09 PHP
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
ionic2 tabs 图标自定义实例
2017/03/08 Javascript
angular动态删除ng-repaeat添加的dom节点的方法
2017/07/20 Javascript
vue富文本编辑器组件vue-quill-edit使用教程
2018/09/21 Javascript
在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟
2018/11/28 Javascript
利用Angular7开发一个Radio组件的全过程
2019/07/11 Javascript
layui 点击重置按钮, select 并没有被重置的解决方法
2019/09/03 Javascript
JSON stringify方法原理及实例解析
2020/10/23 Javascript
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
pandas数据分组和聚合操作方法
2018/04/11 Python
python获取服务器响应cookie的实例
2018/12/28 Python
Django网络框架之HelloDjango项目创建教程
2019/06/06 Python
Django 源码WSGI剖析过程详解
2019/08/05 Python
在pytorch中查看可训练参数的例子
2019/08/18 Python
Python3.7 读取 mp3 音频文件生成波形图效果
2019/11/05 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
2020/07/01 Python
HTML5进阶段内联标签汇总(小篇)
2016/07/13 HTML / CSS
大专生工程监理求职信
2013/10/04 职场文书
水果连锁超市创业计划书
2014/01/24 职场文书
日语专业个人求职信范文
2014/02/02 职场文书
销售冠军获奖感言
2014/02/03 职场文书
2014年秘书工作总结
2014/11/25 职场文书
考试作弊检讨
2015/01/27 职场文书
项目验收申请报告
2015/05/15 职场文书
心灵点滴观后感
2015/06/02 职场文书
办公室规章制度范本
2015/08/04 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
Web前端:CSS最强总结 附详细代码
2021/03/31 HTML / CSS
教你使用TensorFlow2识别验证码
2021/06/11 Python