基于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(4) php 函数 补充2
Feb 15 PHP
php设计模式 Template (模板模式)
Jun 26 PHP
php 伪造本地文件包含漏洞的代码
Nov 03 PHP
PHP对象Object的概念 介绍
Jun 14 PHP
php中count获取多维数组长度的方法
Nov 03 PHP
php+mysqli使用面向对象方式更新数据库实例
Jan 29 PHP
PHP socket 模拟POST 请求实例代码
Jul 18 PHP
PHP中Socket连接及读写数据超时问题分析
Jul 19 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
Nov 20 PHP
PHP递归统计系统中代码行数
Sep 19 PHP
laravel 验证错误信息到 blade模板的方法
Sep 29 PHP
Linux系统下安装PHP7.3版本
Jun 26 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采集类snoopy详细介绍(snoopy使用教程)
2014/06/19 PHP
php实现汉字验证码和算式验证码的方法
2015/03/07 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
2016/05/13 PHP
让iframe自适应高度(支持XHTML,支持FF)
2007/07/24 Javascript
javascript document.images实例
2008/05/27 Javascript
JS 文件本身编码转换 图文教程
2009/10/12 Javascript
浅谈Javascript事件模拟
2012/06/27 Javascript
jquery datatable后台封装数据示例代码
2014/08/07 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
2015/05/11 Javascript
JavaScript笔记之数据属性和存储器属性
2016/03/31 Javascript
jQuery实现字符串全部替换的方法
2016/12/12 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
2017/05/19 Javascript
vue 怎么创建组件及组件使用方法
2017/07/27 Javascript
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
2017/12/26 Javascript
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
基于React+Redux的SSR实现方法
2018/07/03 Javascript
Angular value与ngValue区别详解
2019/11/27 Javascript
[00:20]TI9观赛名额抽取Ⅱ
2019/07/24 DOTA
Numpy array数据的增、删、改、查实例
2018/06/04 Python
python圣诞树编写实例详解
2020/02/13 Python
Pycharm安装python库的方法
2020/11/24 Python
sklearn中的交叉验证的实现(Cross-Validation)
2021/02/22 Python
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
悬挂训练绳:TRX
2017/12/14 全球购物
Topshop法国官网:英国快速时尚品牌
2018/04/08 全球购物
美国瑜伽服装和装备购物网站:Mukha Yoga
2019/02/22 全球购物
AutoShack.com加拿大:北美主要的汽车零部件零售商
2019/07/24 全球购物
绢花、人造花和人造花卉:BLOOM
2019/08/07 全球购物
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
英文简历中的自我评价用语
2013/12/09 职场文书
老师给学生的表扬信
2014/01/17 职场文书
机械加工与数控专业自荐书
2014/06/04 职场文书
美术课外活动总结
2014/07/08 职场文书
感谢信怎么写
2015/01/21 职场文书
2015中学教师个人工作总结
2015/07/22 职场文书
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技