基于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 相关文章推荐
一个用于MySQL的PHP XML类
Oct 09 PHP
php自动适应范围的分页代码
Aug 05 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
Apr 25 PHP
php的array_multisort()使用方法介绍
May 16 PHP
php小技巧之过滤ascii控制字符
May 14 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
Jul 25 PHP
PHP6新特性分析
Mar 03 PHP
PHP中header用法小结
May 23 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
Nov 09 PHP
php中引用&amp;的用法分析【变量引用,函数引用,对象引用】
Dec 12 PHP
PHP 7.0新增加的特性介绍
Jun 08 PHP
Laravel程序架构设计思路之使用动作类
Jun 07 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加MYSQL服务器
2006/10/09 PHP
php模拟post上传图片实现代码
2016/06/24 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
2019/10/17 PHP
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft区别分析
2010/03/12 Javascript
js实现文章文字大小字号功能完整实例
2014/11/01 Javascript
使用jQuery获得内容以及内容的属性
2015/02/26 Javascript
javascript实现随机显示星星特效
2016/01/28 Javascript
详解JavaScript对象类型
2016/06/16 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
2016/06/27 Javascript
Bootstrap Table使用方法解析
2016/10/19 Javascript
footer定位页面底部(代码分享)
2017/03/07 Javascript
了解VUE的render函数的使用
2017/06/08 Javascript
Vue.js中的computed工作原理
2018/03/22 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
echarts设置图例颜色和地图底色的方法实例
2018/08/01 Javascript
react MPA 多页配置详解
2019/10/18 Javascript
JS出现404错误原理及解决方案
2020/07/01 Javascript
浅谈vue项目,访问路径#号的问题
2020/08/14 Javascript
用Python编写web API的教程
2015/04/30 Python
Python的Django框架中的URL配置与松耦合
2015/07/15 Python
python中文件变化监控示例(watchdog)
2017/10/16 Python
Python+OpenCV实现图像融合的原理及代码
2018/12/03 Python
python获取Pandas列名的几种方法
2019/08/07 Python
基于python的列表list和集合set操作
2019/11/24 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
详解pandas.DataFrame.plot() 画图函数
2020/06/14 Python
python批量提取图片信息并保存的实现
2021/02/05 Python
FitFlop美国官网:英国符合人体工学的鞋类品牌
2018/10/05 全球购物
西班牙三叶草药房:Farmacias Trébol
2019/05/03 全球购物
世界上最大的乐谱选择:Sheet Music Plus
2020/01/18 全球购物
Java方面的关于数组和继承的笔面试题
2015/09/18 面试题
大学新闻系自荐书
2014/05/31 职场文书
工作失误检讨书范文
2015/01/26 职场文书
《风筝》教学反思
2016/02/23 职场文书
pytorch实现手写数字图片识别
2021/05/20 Python
python实现简单的井字棋
2021/05/26 Python