基于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 相关文章推荐
PHP4之真OO
Oct 09 PHP
PHP 高手之路(二)
Oct 09 PHP
PHP新手上路(七)
Oct 09 PHP
PHP 得到根目录的 __FILE__ 常量
Jul 23 PHP
php 全文搜索和替换的实现代码
Jul 29 PHP
php学习笔记之 函数声明(二)
Jun 09 PHP
php empty() 检查一个变量是否为空
Nov 10 PHP
19个Android常用工具类汇总
Dec 30 PHP
详解PHP原生DOM对象操作XML的方法
Oct 17 PHP
Laravel中批量赋值Mass-Assignment的真正含义详解
Sep 29 PHP
详解Laravel设置多态关系模型别名的方式
Oct 17 PHP
PHP常用函数之获取汉字首字母功能示例
Oct 21 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获取QQ达人QQ信息的方法
2015/03/05 PHP
php编程中echo用逗号和用点号连接的区别
2016/03/26 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
2019/07/08 PHP
XAMPP升级PHP版本实现步骤解析
2020/09/04 PHP
jQuery AJAX实现调用页面后台方法和web服务定义的方法分享
2012/03/01 Javascript
解析jquery获取父窗口的元素
2013/06/26 Javascript
jquery五角星评分插件示例分享
2014/02/21 Javascript
jQuery判断元素是否存在的可靠方法
2014/05/06 Javascript
JavaScript sub方法入门实例(把字符串显示为下标)
2014/10/17 Javascript
Javascript中prototype属性实现给内置对象添加新的方法
2015/05/14 Javascript
js,jq,css多方面实现简易下拉菜单功能
2017/05/13 Javascript
React复制到剪贴板的示例代码
2017/08/22 Javascript
JavaScript面向对象程序设计中对象的定义和继承详解
2019/07/29 Javascript
scrapyd schedule.json setting 传入多个值问题
2019/08/07 Javascript
JS数据类型判断的几种常用方法
2020/07/07 Javascript
[03:44]2014DOTA2国际邀请赛 71专访:DK战队赛前讨论视频遭泄露
2014/07/13 DOTA
[04:13]2018国际邀请赛典藏宝瓶Ⅱ饰品一览
2018/07/21 DOTA
Python实现爬虫爬取NBA数据功能示例
2018/05/28 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
python实现一组典型数据格式转换
2018/12/15 Python
解决python打不开文件(文件不存在)的问题
2019/02/18 Python
python实现支付宝转账接口
2019/05/07 Python
python版DDOS攻击脚本
2019/06/12 Python
对python3中的RE(正则表达式)-详细总结
2019/07/23 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
解决python3 requests headers参数不能有中文的问题
2019/08/21 Python
python使用opencv实现马赛克效果示例
2019/09/28 Python
Python3 读取Word文件方式
2020/02/13 Python
Final类有什么特点
2012/04/25 面试题
2014全国两会大学生学习心得体会
2014/03/10 职场文书
空气环保标语
2014/06/12 职场文书
学前班语言教学计划
2015/01/20 职场文书
社区禁毒宣传活动总结
2015/05/07 职场文书
2015年教师节感言
2015/08/03 职场文书
大学生社区义工服务心得体会
2016/01/22 职场文书
七年级上册生物的课件
2019/08/07 职场文书