基于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 相关文章推荐
解决phpmyadmin中文乱码问题。。。
Jan 18 PHP
php下使用SimpleXML 处理XML 文件
Feb 27 PHP
php中截取中文字符串的代码小结
Jul 17 PHP
PHP中图片等比缩放的实例
Mar 24 PHP
php函数间的参数传递(值传递/引用传递)
Sep 23 PHP
php生成静态页面的简单示例
Apr 17 PHP
微信公众平台消息接口校验与消息接口响应实例
Dec 23 PHP
如何在HTML 中嵌入 PHP 代码
May 13 PHP
PHP实现即时输出、实时输出内容方法
May 27 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
Sep 30 PHP
PHP实现大数(浮点数)取余的方法
Feb 18 PHP
laravel框架上传图片实现实时预览功能
Oct 14 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
通过文字传递创建的图形按钮
2006/10/09 PHP
PHP parse_url 一个好用的函数
2009/10/03 PHP
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
解析php中如何直接执行SHELL
2013/06/28 PHP
PHP把网页保存为word文件的三种方法
2014/04/01 PHP
JS类的封装及实现代码
2009/12/02 Javascript
jQuery 技巧小结
2010/04/02 Javascript
基于jquery的给文章加入关键字链接
2010/10/26 Javascript
非主流的textarea自增长实现js代码
2011/12/20 Javascript
返回上一页并自动刷新的JavaScript代码
2014/02/19 Javascript
7个JS基础知识总结
2014/03/05 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
2015/12/02 Javascript
jQuery实现简单弹窗遮罩效果
2017/02/27 Javascript
微信小程序 循环及嵌套循环的使用总结
2017/09/26 Javascript
js中document.write和document.writeln的区别
2018/03/11 Javascript
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
vue 实现移动端键盘搜索事件监听
2019/11/06 Javascript
如何在微信小程序中存setStorage
2019/12/13 Javascript
微信小程序实现树莓派(raspberry pi)小车控制
2020/02/12 Javascript
[06:07]刀塔密之二:攻之吾命受之吾幸
2014/07/03 DOTA
[35:27]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第二场 10.29
2020/10/29 DOTA
[02:11]完美世界DOTA2联赛10月28日赛事精彩集锦:来吧展示实力强劲
2020/10/29 DOTA
Python random模块(获取随机数)常用方法和使用例子
2014/05/13 Python
分享一下Python数据分析常用的8款工具
2018/04/29 Python
Python实现投影法分割图像示例(二)
2020/01/17 Python
python误差棒图errorbar()函数实例解析
2020/02/11 Python
详解HTML5中ol标签的用法
2015/09/08 HTML / CSS
马来西亚航空官方网站:Malaysia Airlines
2017/07/28 全球购物
Viking比利时:购买办公用品
2019/10/30 全球购物
俄罗斯最大的灯具网站:Fandeco
2020/03/14 全球购物
C# .NET面试题
2015/11/28 面试题
环境工程专业自荐信
2014/03/03 职场文书
2015年高二班主任工作总结
2015/05/25 职场文书
tp5使用layui实现多个图片上传(带附件选择)的方法实例
2021/11/17 PHP
Apache SeaTunnel实现 非CDC数据抽取
2022/05/20 Servers