基于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:风雨欲来 路在何方?
Oct 09 PHP
PHP获取类中常量,属性,及方法列表的方法
Apr 09 PHP
Windows下安装Memcached的步骤说明
Apr 25 PHP
php设计模式  Command(命令模式)
Jun 17 PHP
php数组函数序列之array_search()- 按元素值返回键名
Nov 04 PHP
PHP仿博客园 个人博客(2) 数据库增添改删
Jul 05 PHP
php while循环得到循环次数
Oct 26 PHP
yii上传文件或图片实例
Apr 01 PHP
WordPress中注册菜单与调用菜单的方法详解
Dec 18 PHP
PHP使用Redis实现Session共享的实现示例
May 12 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
Oct 01 PHP
php获取是星期几的的一些常用姿势
Dec 15 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多用户计数器代码
2007/03/11 PHP
php 归并排序 数组交集
2011/05/10 PHP
PHP之uniqid()函数用法
2014/11/03 PHP
php实现session自定义会话处理器的方法
2015/01/27 PHP
php根据地址获取百度地图经纬度的实例方法
2019/09/03 PHP
最新优化收藏到网摘代码(digg,diigo)
2007/02/07 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
排序算法的javascript实现与讲解(99js手记)
2014/09/28 Javascript
javascript实现的闭包简单实例
2015/07/17 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
基于JS快速实现导航下拉菜单动画效果附源码下载
2016/10/27 Javascript
Bootstrap CSS组件之按钮组(btn-group)
2016/12/17 Javascript
Vuex简单入门
2017/04/19 Javascript
详解node中创建服务进程
2017/05/09 Javascript
JS判断非空至少输入两个字符的简单实现方法
2017/06/23 Javascript
vue.js组件之间传递数据的方法
2017/07/10 Javascript
vue 中动态绑定class 和 style的方法代码详解
2018/06/01 Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
2018/08/30 Javascript
对TypeScript库进行单元测试的方法
2019/07/18 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
python 读写、创建 文件的方法(必看)
2016/09/12 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
Python 内置变量和函数的查看及说明介绍
2019/12/25 Python
python3 pathlib库Path类方法总结
2019/12/26 Python
python3读取csv文件任意行列代码实例
2020/01/13 Python
Python ini文件常用操作方法解析
2020/04/26 Python
Python urllib request模块发送请求实现过程解析
2020/12/10 Python
HTML5 FileReader对象的具体使用方法
2020/05/22 HTML / CSS
涉外文秘个人求职的自我评价
2013/10/07 职场文书
成龙霸王洗发水广告词
2014/03/14 职场文书
给校长的建议书100字
2014/05/16 职场文书
办公室年度工作总结2015
2015/05/21 职场文书
python实现进度条的多种实现
2021/04/29 Python
Python如何解决secure_filename对中文不支持问题
2021/07/16 Python
【海涛dota解说】海涛小满开黑4v5被破两路翻盘潮汐第一视角解说
2022/04/01 DOTA
Python可视化神器pyecharts绘制地理图表
2022/07/07 Python